这很简单,但我遇到了这个问题。 http://www.ipix.lt/images/90928843.png 我想要缓冲[5]。但不是符号值,而是255.尝试将类型转换为int或byte,但得到-1。
答案 0 :(得分:4)
正确的是,将它转换为int,你得到-1,因为你的实现中的char
是一个有符号的类型(如果char
是有符号或无符号的,它实际上是实现定义的,通常你可以在编译器选项中更改它);您在调试器窗口中看到的是它的无符号表示。
要获得无符号值,首先应将其转换为unsigned char
,然后转换为unsigned int
(我认为您也可以将其转换为unsigned int
,但我是不确定)。
--- --- EDIT
实际上在调试器窗口中我看到它的类型为unsigned char
,所以我的答案的第一部分可能不适用......你应该告诉我们如何定义缓冲区。
答案 1 :(得分:1)
byte
如何定义? C ++不知道这种类型。
但是你可以转换为int
:
static_cast<int>(msg.buffer[i + 2]) …
注意使用static_cast
而不是弃用的C风格的强制转换。始终使用前者,而不是后者。有关原因的说明,请参阅C++ cast syntax style上的问题。
(除此之外,Matteo是正确的,你需要先转换为无符号值。)
答案 2 :(得分:0)
使用stringstream(http://www.cplusplus.com/reference/iostream/ostream/operator%3C%3C/)将是一个可行的解决方案,将字节(我想象的只是一个无符号字符)转换为存储为字符串的整数。