0

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になるようにするにはどうすればよいですか。

ありがとう。

4

3 に答える 3

2

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';
}
于 2012-06-19T01:57:34.937 に答える
2

数値は逆方向に格納されているようです。これは人間が読むのは自然ではありませんが、インデックスは適用する必要のある2の累乗を参照するため、数値を表す非常に自然な方法です。

変換を行うための既存のライブラリはありません。自分で解析するコードを作成する必要があります。

int i = 0;
unsigned int result = 0;

while (x[i]) {
    result |= (x[i] == '1') << i;
    i++;
}
于 2012-06-19T01:58:19.967 に答える
1
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);
于 2012-06-19T01:54:21.697 に答える