16進形式に変換する必要のある文字列xがあります。
char x[5];
x[0]='0';
x[1]='1';
x[2]='0';
x[3]='1'; //x contains value of 0xA or decimal 10;
x[4]='\0';
これを変換して符号なし整数変数に格納し、変数の値が0xAになるようにするにはどうすればよいですか。
ありがとう。
16進形式に変換する必要のある文字列xがあります。
char x[5];
x[0]='0';
x[1]='1';
x[2]='0';
x[3]='1'; //x contains value of 0xA or decimal 10;
x[4]='\0';
これを変換して符号なし整数変数に格納し、変数の値が0xAになるようにするにはどうすればよいですか。
ありがとう。
xの文字列が逆の順序になっているのはなぜですか?
char x[5] = {'1', '0', '1', '0' };
unsigned int result = 0;
int i = 0;
while(x[i] != 0)
{
result = result * 2 + x[i]-'0';
}
数値は逆方向に格納されているようです。これは人間が読むのは自然ではありませんが、インデックスは適用する必要のある2の累乗を参照するため、数値を表す非常に自然な方法です。
変換を行うための既存のライブラリはありません。自分で解析するコードを作成する必要があります。
int i = 0;
unsigned int result = 0;
while (x[i]) {
result |= (x[i] == '1') << i;
i++;
}
char *x = "0101";
0xAまたは10進数の10に等しくありません。2進数の「1010」は、おそらくそれがあなたの意図したことですか?
文字列で表される数値を変換する簡単な方法は、atoiのような他の多くの関数の中でもstrtolです。strtolは、少なくとも基数の供給を許可します。
http://www.cplusplus.com/reference/clibrary/cstdlib/strtol
何かのようなもの:
unsigned long val = strtol(x, NULL, 2);