Java中int类型转byte[4]取补码问题

kang92 2016-08-02 04:32:20
如果为负数
比如 int a = -23;
byte b = (byte)a
为什么b中存储的是a的补码。 这样反解析回来不是特别麻烦吗。我的byte字符串是发给c++用的。有没有什么解决方法。
...全文
315 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhong52111 2020-03-12
  • 打赏
  • 举报
回复
byteArray[3] = (byte) (integer&0xff);
kang92 2016-08-06
  • 打赏
  • 举报
回复
没有满意回答,结帖了。
kang92 2016-08-03
  • 打赏
  • 举报
回复
引用 4 楼 iHTML 的回复:
强转就是简单地截断,没有什么取补码的作用吧。。。 byteArray[3] = (byte) (integer);输出出来是负值,是因为恰巧首位是1啊,java直接把这个byteArray[3]当做补码去解读了。
我的 integer本来是个正整数,它的补码就是原码。 现在这样int转byte。 它给我最后8位变成补码,这样内存都乱了啊。
结贴是美德 2016-08-03
  • 打赏
  • 举报
回复
强转就是简单地截断,没有什么取补码的作用吧。。。 byteArray[3] = (byte) (integer);输出出来是负值,是因为恰巧首位是1啊,java直接把这个byteArray[3]当做补码去解读了。
kang92 2016-08-02
  • 打赏
  • 举报
回复
求大神帮忙!
kang92 2016-08-02
  • 打赏
  • 举报
回复
知道问题原因了,我的代码如下 //Java 采用big endian字节序 private static byte[] intToByteArray(final int integer) { byte[] byteArray = new byte[4]; byteArray[3] = (byte) (integer); byteArray[2] = (byte) (integer >> 8); byteArray[1] = (byte) (integer >> 16); byteArray[0] = (byte) (integer >> 24); return (byteArray); } 假设interger是一个大的正整数, interger是32位的,它的最低8位的最高位可能为1。 byteArray[3] = (byte) (integer); 强转就会出问题。 它会取最低8位的补码, 我这里明明是想要原码的。 这该如何处理。
kang92 2016-08-02
  • 打赏
  • 举报
回复
有点理解了。计算机中的数值都是以补码形式存放在内存中c++和java都是。但是Java中没有memcpy这样的东西。 那如何保证 int 转byte[4] , byte[4]中 存储的是 和 int在内存中存储的 一模一样的二进制数值呢。

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧