【发布时间】:2015-10-27 17:26:58
【问题描述】:
我正在尝试将一个 int(最大 65535)转换为一个两字节数组。 在 C 中我使用了 uint16,但 Java 不知道任何无符号值。
要将字节转换为数组,我尝试使用它:
byte[] data = { (byte) ((num >> 8) & 0xff), (byte) (num & 0xff) };
但如果我使用 16335 作为值,我只会得到:[63, -49] 而不是:[63, 207]。 有没有办法在 Java 中做到这一点?
我需要字节数组中的这个无符号字节来使用输出流发送它
【问题讨论】:
-
字节在 java 中签名...(所以 -49 ~= 207)
-
这些是正确的字节。问题是您是否在符号有问题的任何上下文中使用它们,如果是这样,您期望用什么来代替 -49,因为 207 不是 Java 中字节的有效值。 Java 中没有无符号整数,但在特定情况下您可以使用有符号整数/短/字节进行无符号操作。
-
-49 是打印字节时屏幕上打印的值,因为 Java 将其视为有符号值。但是,如果 Java 中存在无符号字节,则该字节内的位与无符号字节 207 内的位相同。 -49 是正确的值。如果您愿意,可以将其打印为 207。如果您将其发送到输出流中并在 C 中将其作为无符号字节读取,您将得到 207。
-
@ForJ9 它们是一样的,只是在你的字节流中发送。
-
感谢您的所有 cmets!不存在的问题现在解决了;)