【问题标题】:outputStream.write() for int[] array用于 int[] 数组的 outputStream.write()
【发布时间】:2014-04-23 19:36:53
【问题描述】:

我正在寻找与 outputStream.write() 做同样事情但会接受 int 数组的东西。

实际上,我正在使用这个:outputStream.write(),但这个只接受 byte,byte[]int

我可以使用byte[],但我要发送的值是

 [255,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255]

所以我可以使用byte[],因为范围仅来自-127 to 127:/

在Port_Com上发送一个命令,它只接受19字节的数据包,并且必须以255开头和结尾。

【问题讨论】:

  • 如果你所有的值都在 0-255 范围内,你应该使用 byte[] 代替。将每个int 转换为byte,您仍然可以在电线上得到正确的位。
  • 是的,我确定。这是相同的位,只是以不同的方式解释。
  • @D3fman 是的,但是 0 和 1 是相同的,255 是 1111 1111,用有符号的说法是 -1,我同意,尽管这是让我鄙视 Java 的众多事情之一。无符号整数ftw!
  • 正如我所说,我讨厌 Java,你.... 一个 int 转换会将其转换为负 1 ..... @JonSkeet 答案?
  • @D3fman 它不会发送 255 但会发送 1111 1111 位,这就是你想要的

标签: java arrays int byte outputstream


【解决方案1】:

这是对字节的常见误解,因为谣言一再重复。

其实字节的范围是从

00000000 (binary) to   11111111 (binary)

如果您只对位模式感兴趣,则没有理由将字节解释为数字。特别是,没有理由将字节解释为 signed 数字,因为 java 默认就是这样做的。

因此,正如 Jon Skeet 所说,将整数转换为字节并写入这些字节。

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多