2011-04-26 78 views
4

我有存储在两个字节数组十六进制值:字符数组转换十六进制值的整数值

unsigned char hex[2] = {0x02, 0x00}; 

我怎样才能将它转换为十进制值?

+1

这是其中的一个夜晚......随意给我尽可能多的冒犯,因为我应得的。我不确定为什么,但近距离决赛越多,我就会在“思考”中产生可怕的糟糕失误。 出于某种原因,我认为除此之外还有更多。我让自己相信它要复杂得多...... – tgai 2011-04-26 00:23:04

+1

@Mitch小麦:别担心。你的评论实际上让我暂停了一秒钟,并意识到我确实知道我的问题的答案。当我接近开始我的合作社时,我发现自己非常害怕犯这样的错误,而且看起来很愚蠢。提醒大家,犯错误和/或不记住头顶的事情注定要发生,而不是世界末日。 – tgai 2011-04-26 00:35:29

回答

6

可以使用(位运算)

int b = (hex[0] << 8) | hex[1];

或(简单的数学)

int b = (hex[0] * 0x100) + hex[1];

0

取决于endian-ness,但类似的东西?

short value = (hex[0] << 16) & hex[1]; 
+0

这对'<< 16'和'&'都是不正确的。 – MByD 2011-04-26 00:23:01

+0

“*取决于你拥有哪种印第安人”*部分是真实的。 – 2011-04-26 00:37:00

+0

为什么这是不正确的一些原因:首先你要将第一个字符移位16位而不是8位。 char通常是8位。其次,你要将两部分联系起来,你需要或者他们。通过将十六进制[0]移位,您将前16位保留为零,并且在使用十六进制[1]进行与运算时,您将有效地移除十六进制[1]。 (因为zero anded总是为零)感谢您的输入! – tgai 2011-04-26 00:44:36

0

这是不是一种有效的方式,至少我不认为它是,但它会在所有情况下工作,无论数组的大小,并将轻松地转换为b。

__int8 p[] = {1, 1, 1, 1, 1}; //Let's say this was the array used. 
int value = sizeof(p); //Just something to store the length. 
memcpy(&value, &p, value > 4 ? 4 : value); //It's okay to go over 4, but might as well limit it. 

在上面的例子中,变量“value”的值为16,843,009。这相当于如果你已经完成了下面的内容。

int value = p[0] | p[1] << 0x8 | p[2] << 0x10 | p[3] << 0x18; 
相关问题