我有一个char类型指针数组 buf ,我想将它的每个元素转换为unsigned int并将其存储在unsigned int或int array 中。
问题是下面的代码的第二个代码命令用于转换后在无符号int中转换后返回一个负值,而我只期望从0到255的正值。为什么当我使用unsigned时它返回负值它?我应该怎么做,第二行代码中的转换只返回0到255之间的正值?
int array [100];
array[l]=((unsigned int(buf[0]))*5));
请帮帮我。
谢谢。
答案 0 :(得分:2)
第二条指令过于复杂。
将您的说明分成不同的行。
在一行中,访问“char类型”中实际存储的值 指针数组“。
在后续行中,将其转换为您想要的任何内容。
这将帮助您诊断问题,并使代码更具可读性和可维护性。
答案 1 :(得分:0)
您希望*(reinterpret_cast<unsigned char *>(&buf[0])))
不是(unsigned int(buf[0]))
。不要忘记在将乘以5之前将其投射到int
。
答案 2 :(得分:0)
我认为你应该将array
声明为unsigned int
。另外,使用unsigned char
代替unsigned int
进行投射,然后将其分配给array
元素。这是因为负值转换为无符号目标类型将符合C ++标准第4.7节第2段。
unsigned int array [100];
array[l]=((unsigned char(buf[0]))*5));