【问题标题】:Byte type is weird字节类型很奇怪
【发布时间】:2012-06-28 06:36:22
【问题描述】:

我需要通过 UDP 协议发送一些字节,起始顺序是 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF

当我这样定义时:

byte [] begin = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; 

我收到一条错误消息,提示我需要将它们转换为字节类型。据我所知,0xFF 没有超出字节类型,那么问题是什么?

如果我写这个,它会起作用:

byte [] begin = {(byte) 0xFF,(byte) 0xFF,(byte) 0xFF,(byte) 0xFF,(byte) 0xFF,(byte) 0xFF};

【问题讨论】:

标签: java android


【解决方案1】:

据我所知,0xFF 没有超出字节类型,那么问题是什么?

确实如此。字节是用 Java 签名的,所以范围是 -0x80 到 0x7f(含)。

(byte 类型 已 签名的事实令人头疼,但我们走了……)

【讨论】:

  • 如果我投射它有效吗?还是我需要定义为另一种数据类型
  • @opc0de:是的,投射绝对没问题。
【解决方案2】:

java 中的任何文字数字都编译为 int。即使它是在像这里这样的情况下声明的,其中一个字节是预期值。强制转换是将文字 int 实际转换为字节的东西。

【讨论】:

  • 除非存在从byte 到byte 本身范围内的常量int 表达式的隐式转换。问题是0xff 不在byte 的范围内。用(比如说)0x7f 试试,你就不需要演员表了。
猜你喜欢
  • 1970-01-01
  • 2013-06-10
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 2012-02-19
  • 2012-07-17
  • 1970-01-01
相关资源
最近更新 更多