将字符数组中的十六进制值转换为整数值

5

我有一个十六进制值存储在一个两个字节的数组中:

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

如何将这个转换为十进制数值?

1
这是那种夜晚之一... 尽管我应该受到指责,但请随意给予尽可能多的冒犯。我不确定为什么,但越接近期末考试,我就越容易出现可怕的思维失误。由于某种原因,我认为事情并不止于此。我自己相信它要复杂得多... - tgai
1
@Mitch Wheat: 别担心。您的评论让我停下了一秒钟,意识到我知道我的问题的答案。随着我接近开始合作,我发现自己恐惧犯这样的错误,看起来相当愚蠢。提醒自己犯错和/或不记得某些事情并非世界末日,这可能是有益的。 - tgai
3个回答

7

您可以使用(位运算)

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

或(简单的数学运算)

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


0

取决于大小端,但大概是这样的吧?

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

取决于你得到了哪种印度人”这部分是真的。 - Mateen Ulhaq
以下是为什么它不正确的一些原因:首先,你将第一个字符左移了16位而不是8位。char通常为8位。其次,你AND了这两个部分,你需要OR它们。通过将hex [0]向左移动,您将使前16位保持为零,并且当与hex [1] AND时,您将有效地删除hex [1]。(由于ANDed的零始终为零)但还是感谢您的输入! - tgai

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接