gpt4 book ai didi

c - 如何将 char 转换为 unsigned int?

转载 作者:太空狗 更新时间:2023-10-29 16:43:21 26 4
gpt4 key购买 nike

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

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;

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

更新

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

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

最佳答案

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

如果 sizeof(unsigned int) >= 2 * sizeof(unsigned char) (不是 C 标准保证的东西)

现在...这里有趣的事情肯定是运算符的顺序(多年以来我仍然只记得 +, -, * and / ...我感到羞耻 :-),所以我总是尽可能多地放置括号)。 []是国王。第二个是 (cast) .第三个是<<第四个是 | (如果您使用 + 而不是 | ,请记住 +<< 更重要,因此您将需要括号)

我们不需要向上转换为 (unsigned integer)两个(unsigned char)因为有 integral promotion这将为我们做一个,而对于另一个,它应该是自动的 Arithmetic Conversion .

如果你想减少头痛,我会补充说:

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

关于c - 如何将 char 转换为 unsigned int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7893128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com