0

我有一个字符串 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。二进制 '1010' 会,也许这就是你的意思?

转换字符串表示的数字的简单方法是 strtol,以及 atoi 等许多其他函数。strtol 至少允许提供一个基数。

http://www.cplusplus.com/reference/clibrary/cstdlib/strtol

就像是:

unsigned long val = strtol(x, NULL, 2);
于 2012-06-19T01:54:21.697 回答