Java 将long getTime()分解为4个短片,但实际上不起作用

Java 将long getTime()分解为4个短片,但实际上不起作用,java,arduino,modbus,gettime,Java,Arduino,Modbus,Gettime,我是一个初学者,我想为Modbus协议将长时间的gettime分成4个短时间,但它并不总是有效。我不知道为什么(可能是因为演员)。我希望有人能帮助我:) 提前感谢那些能启发我的人 public void SetUp() { long time = new Date().getTime(); // time in ms since epoch System.out.println(time); int high32 = (int)(time >> 32);

我是一个初学者,我想为Modbus协议将长时间的gettime分成4个短时间,但它并不总是有效。我不知道为什么(可能是因为演员)。我希望有人能帮助我:)

提前感谢那些能启发我的人

public void SetUp() {
    long time = new Date().getTime();  // time in ms since epoch
    System.out.println(time);
    int high32 = (int)(time >> 32);
    int low32 = (int)time;
    long l = (((long)high32) << 32) | (low32 & 0xffffffffL);
    short low16_1 = (short) high32;
    short high16_1= (short) (high32 >> 16);
    int complete = low16_1 | (high16_1 << 16);
    short low16_2 = (short) low32;
    short high16_2= (short) (low32 >> 16);
    int complete2 = low16_2 | (high16_2 << 16);
    long d = (((long)complete) << 32) | (complete2 & 0xffffffffL);
    System.out.println(l);      
    System.out.println(d);
    Date e = new Date (time);
    System.out.println(e);
    Date g = new Date (d);
    System.out.println(g);
}
用一个工会就行了

这是如何从1长(32位)转换为4 uint8(8位)

您可以使用unit16\u t执行类似的操作,这里您必须使用2而不是4

然后,您可以在接收短片的同一个文件夹中将短片组合在一起,以获得原始时间值

for(int i=0;i<4;i++)
entry.output[i]=data[i];
//get the original value from entry.intput as long

用于(int i=0;i注意从两个短整数转换为int和从两个int转换为长整数的方式之间的区别?这个掩码很重要!哦,我认为它不会影响…非常感谢你的回答!在任何时候,使用union都是一种更快更干净的方法。它需要更少的处理,而且这种方法是标准的r任何数据类型。你只需要知道数据类型需要多少ram。注意OP上的标记。我之所以到达这里,是因为标记Arduino,这是C编程。设置函数也用于Arduino。@Gabriel,你在编码什么,使用哪种语言?Arduino上java Modbus Slave中的Modbus Master:这是大师在这里。很好,我找到了答案(面具中的错误,谢谢Real怀疑论者)非常感谢你的帮助!
union convertor{
long input;
uint8_t output[4];
}

convertor entry;
entry.input=new Date().getTime()
//the value will be split into 4 unit8_t of entry.output
for(int i=0;i<4;i++)
entry.output[i]=data[i];
//get the original value from entry.intput as long