Notify me via e-mail if anyone answers my comment. 固定 16進数について. 16進数や10進数は printf 関数で表示することが可能ですが、C言語では2進数表示する標準関数はありません。しかし 2進数表示は「特定の1つのビットの値を調べる」を応用することで簡単に実現することが可能 です。 【C言語入門】atoiの使い方(文字列から数値への変換) ... 【C言語入門】文字列とは?文字列の使い方総まとめ . こんにちは、リバティエンジニア[? Copyright © 1999-2019 らららのエンジニアラウンジ All Rights Reserved. C言語のプログラムの中で「文字で表現された数字を、数値に変えたい!」と、思うことってあるんです。例えば、数字 “123” を数値「123」に変換したい、そんなシーンですね。, なぜ、こんなことがしたいかというと、数字 “123” は文字であるがゆえに計算ができないんです。計算するためには数値「123」にする必要があります。, 注意:この記事においては意識的に、文字で表現された数のことを「数字」、計算可能な数のことを「数値」、と表現を切り分けて解説します。, ※atoi関数を使うと簡単な数字なら数値に変換ができますが、複雑な変換を求めているのであればsscanf関数の利用をオススメします。, C言語で「数字」を「数値」へ変換するための標準ライブラリ関数は、次の関数になります。, よく見ると、引数は同じデータ型ですが、戻り値の型が異なっていますね。C言語は型制約の強い言語のため、データ型の種類に応じて関数を定義しています。, atoiとは「ascii(アスキーコードの文字) to(を) integer(整数型へ)」という意味になります。このような名前の法則を知っておくと、記憶に残りやすくなります。, 注意としてはatof関数は「float型」の略ですが、戻り値の型は「double型」になっていることですね。, それでは、一番基本となるatoi関数を呼び出してみましょう。引数に「数字」である”123456″の文字列をポインタで受け渡します。, それは、様々な入力パターンの文字や数字を「引数」で渡したときに、どのような「戻り値」の結果を受け取れるかをしっかりと把握することです。, これを把握しておかないと、意図せぬ動作になって場合によっては大きな問題となります。, 先頭から文字を変換し、変換できない文字が出現した時点で変換を終了していることが想像できます。, atoi関数の仕様の性質上、注意するべき点があります。それは「変換異常時に0を返却」するということです。, 入力パターンとして “0” という入力もあり得るわけですから、正常な変換結果の「0」と変換異常時の「0」の見分けが付きません。, このような判別できないケースも含めて、成立するプログラムを組み立てる必要があります。, 続けて、浮動小数点の数字を数値に変換するatof関数も同様に動作を確認しておきましょう。, 実は数字を数値に変換する方法には、atoi関数以外にもsscanf関数を使う方法があります。, sscanf関数はかなりリッチな機能を備えており、文字列の中から英字と数字を切り分けたり、16進数の数字を数値に変換することもできます。, C言語は文字列を扱うのが苦手なため、複雑な文字列を操作する際は「sscanf関数」のような高機能関数を使うとバグの発生を軽減できます。, 年間200人以上のプログラミング初心者・未経験者を直接指導で教育している現役エンジニアです。, 本サイトでは開発経験20年のノウハウ・学習ポイント・カリキュラムを全力でわかりやすく解説します!, C言語で複雑な文字列から情報を抜き出す時にはsscanf関数を利用すると便利です。正しく使うためには結構な知識量が必要となります。しっかりと理解した上で使用しましょう。, C言語を扱う上でよく利用する機能を紹介します。標準ライブラリ関数の使い方やC言語で利用するキーワードの解説など、様々なC言語に関する情報をお届けします。, 独学でプログラミングを始めようとしている方へのC言語入門学習カリキュラムです。C言語を学ぶために必要な知識を順序立てて解説します。順に進められる構成となっており、課題が用意されているため理解を確認しながら進めることができます。. 2進数や8進数、10進数、16進数で表記された文字列を、整数型の数値に変換する方法を解説します。, N進文字列から整数型への数値変換を実現する場合には、strtol関数やsscanf関数を用いた方法を取ることが一般的です。, strtol関数は文字列を数値に変換するための関数ですが、第三引数に基数を指定することが可能となっています。ここに変換したいN進数の基数を指定することで、N進表記の文字列から数値への変換が行えます。, 文字列内の数字列に基数を表す接頭辞(16進数を表す0x, 0Xや8進数を表す0)が付随されている場合には、第三引数を0に指定することも可能です。, 基数を表す接頭辞の考慮は、16進表記の場合に限り、strtod関数でも行われます。また同等の変換は# atof関数でも行われます。, sscanf関数では、8進整数と16進整数の変換指定を行うことができます。8進文字列からの変換を表す際には%oを指定し、16進文字列では%xを指定します。, 大きな値を変換する場合には、長さ修飾子としてlong型を表すlやlong long型を表すllを指定する必要があります。以下の例では、unsigned long型相当の16進文字列を変換するために、変換指定子として%lxを指定しています。, FFFFFFFFFFFFFFFFのデータ幅は64bit長となっていますが、long型が32bitで表現されているような環境では、全てのデータを変換しきれない場合があります。その場合は、long long型による変換を検討してみると良いでしょう。, atof関数は、数字列の先頭が0xまたは0Xで始まる場合に、数字列を16進数として変換します。8進数としての変換には対応していないため注意が必要です。また戻り値型はdouble型となります。, C++の文字列型std::stringから変換する場合にはstd::stoi関数を用いることができます。stoi関数の第三引数に基数を指定します。, ← 【C言語】atoi関数|ato関数群(atoi, atol, atoll, atof)完全解説, fmod関数|float/double型の割り算の余りを求める方法【浮動小数点数の剰余】 →, strcpy関数/strncpy関数【詳解|危険性と注意点 strlcpyの脆弱性】, 文字列の一部を表示する|部分文字列の出力【printf substringイディオム】, fmod関数|float/double型の割り算の余りを求める方法【浮動小数点数の剰余】, 月収6万円の「いかがでしたかブロガー」を見て思ったこと|哀れなトレンドブログの実態.