【问题标题】:Getting byte value from char从 char 获取字节值
【发布时间】:2011-01-16 15:45:20
【问题描述】:

这很简单,但我遇到了问题。 http://www.ipix.lt/images/90928843.png 我想计算缓冲区[5]。但不是符号值,而是 255。尝试将类型转换为 int 或 byte 但得到 -1。

【问题讨论】:

  • 是的,它还没有实现。关键是将缓冲区 [5] 打印为 255。或将缓冲区分配给 int 作为 255。

标签: c++ char byte


【解决方案1】:

正确的是,将其转换为 int,您得到 -1,因为您的实现中的 char 是有符号类型(如果 char 是有符号或无符号,它实际上是实现定义的,通常您可以将其更改为编译器选项);您在调试器窗口中看到的是无符号表示。

要获得它的无符号值,您应该首先将其转换为unsigned char,然后再转换为unsigned int(我认为您也可以将其转换为unsigned int,但我不确定)。

---编辑---

实际上在调试器窗口中我看到它的类型为unsigned char,所以我的答案的第一部分可能不适用……你应该告诉我们这个缓冲区是如何定义的。

【讨论】:

  • 只是字符缓冲区[大小];你在第一部分是对的。铸造它两次有效。但将其转换为 unsigned int 会得到 -1。
【解决方案2】:

byte 是如何定义的? C++ 不知道这种类型。

但是,您可以转换为 int

static_cast<int>(msg.buffer[i + 2]) …

注意使用static_cast 而不是已弃用的 C 样式强制转换。始终使用前者,永远不要使用后者。有关原因的解释,请参阅C++ cast syntax style 上的问题。

(除此之外,Matteo 是正确的,因为您需要先转换为无符号值。)

【讨论】:

  • @gemexas:正确,请查看 Matteo 的答案,了解为什么会这样以及如何解决。虽然这应该适用于unsigned char ...
【解决方案3】:

使用 stringstream (http://www.cplusplus.com/reference/iostream/ostream/operator%3C%3C/) 将是一种可行的解决方案,将字节(我想这只是一个无符号字符)转换为存储为字符串的整数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2023-04-07
    相关资源
    最近更新 更多