gpt4 book ai didi

Java 位操作错误(转换为字节并转换回来)

转载 作者:行者123 更新时间:2023-12-01 19:01:28 25 4
gpt4 key购买 nike

我正在尝试将出生日期(三个整数)转换为字节并将其转换回来,但我遇到了问题。我必须使用位操作对其进行转换,并通过多播服务器发送数据并接收它并改回 int。服务器工作正常,但位操作对我来说很难。代码出了什么问题:

转换:

      int D=12; 
int M=9;
int Y=1983;
short DMY=0;
DMY = (short)(DMY | (D << 19));
DMY = (short)(DMY | (M << 15));
DMY = (short)(DMY | Y);
byte[] data = new byte[3];
data[0] = (byte)(DMY >>> 8 );
data[1] = (byte)(DMY >>> 16 );
data[2] = (byte)(DMY & 0xffff);

转换回来:

           byte[] rec_data = new byte[3];
rec_data = dp.getData();
short Rec_dmy;


Rec_dmy = (short)(rec_data[0] & 0xff);
Rec_dmy = (short) (Rec_dmy << 8);
Rec_dmy = (short)(Rec_dmy | (rec_data[1] & 0xff));
Rec_dmy = (short) (Rec_dmy << 8);
Rec_dmy = (short)(Rec_dmy | (rec_data[2] & 0xffff));

byte tmp = (byte) ((Rec_dmy >>> 19) & 0x1F);
byte tmp2 = (byte) ((Rec_dmy >>> 15) & 0x1FF);
byte tmp3 = (byte) (Rec_dmy & 0x7F);

System.out.println(tmp);
System.out.println(tmp2);
System.out.println(tmp3);

Println 给出以下答案:31-163

这与原始版本 1983 年 12 月 9 日不符

最佳答案

Short 只能容纳 16 位;您正尝试打包更多内容(例如,将日期左移 19,一旦转换为空,将导致全零值)。您需要使用 int 或 long 来保存所有字段。

确实,位操作中发生了一些不正确的事情。

我的建议是放弃位操作,只将日、月和年作为单独的字段发送:每个日和月一个字节,两个(短字节)代表年。这需要 4 个字节(仅额外一个字节),但需要少得多的调整才能得到正确的结果。

关于Java 位操作错误(转换为字节并转换回来),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12119396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com