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