如何将 char 转换为 unsigned int?

2024-05-12

我有一个字符数组,它实际上用作字节数组,而不是用于存储文本。在数组中,有两个特定字节表示我需要存储到无符号 int 值中的数值。下面的代码解释了设置。

char* bytes = bytes[2];
bytes[0] = 0x0C; // For the sake of this example, I'm 
bytes[1] = 0x88; // assigning random values to the char array.

unsigned int val = ???; // This needs to be the actual numeric 
                        // value of the two bytes in the char array.  
                        // In other words, the value should equal 0x0C88;

我不知道该怎么做。我认为这会涉及到一些指针的转换和重新转换,但我无法让它工作。我怎样才能实现我的最终目标?

UPDATE

感谢 Martin B 的快速回复,但这不起作用。具体来说,就我而言,这两个字节是0x00 and 0xbc。显然我想要的是0x000000bc。但我在 unsigned int 中得到的是0xffffffbc.

Martin 发布的代码是我实际的原始代码,只要所有字节都小于 128(即正符号 char 值),它就可以正常工作。


unsigned int val = (unsigned char)bytes[0] << CHAR_BIT | (unsigned char)bytes[1];

This if sizeof(unsigned int) >= 2 * sizeof(unsigned char)(C 标准不保证)

现在...这里有趣的事情肯定是运算符的顺序(多年来我仍然只记得+, -, * and /...我真丢脸:-),所以我总是放尽可能多的括号)。[]是国王。其次是(cast)。第三是<<第四个是|(如果您使用+而不是|,记住这一点+<<所以你需要括号)

我们不需要向上转换为(unsigned integer)他们俩(unsigned char)因为有积分推广 http://msdn.microsoft.com/en-us/library/fc9te331.aspx这将为我们做这件事,而对于另一个人来说,它应该是自动的算术转换 http://msdn.microsoft.com/en-us/library/09ka8bxx.aspx.

如果您想减少头痛,我会补充一点:

unsigned int val = (unsigned char)bytes[0] << CHAR_BIT;
val |= (unsigned char)bytes[1];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 char 转换为 unsigned int? 的相关文章

随机推荐