Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个java字节转换是如何工作的 int-port=data[4]_Java - Fatal编程技术网

这个java字节转换是如何工作的 int-port=data[4]

这个java字节转换是如何工作的 int-port=data[4],java,Java,int和其他整数原语(java)使用2的补码表示法()存储。这意味着如果你的数字是正数,那么它将以31位表示,如果是负数,那么你必须从2^32中找到“completemet”。 在接受无符号变量的语言中,到二进制的转换可能是您所期望的,即32位的正常基转换。在此之前,如果您不熟悉逻辑运算符,可能需要阅读。 对于您的情况,存储一个4字节数组(32位是int的长度),并执行以下操作: port=data[4]int和其他整数原语(java)使用2的补码表示法()存储。这意味着,如果你的数字是正数,将

int和其他整数原语(java)使用2的补码表示法()存储。这意味着如果你的数字是正数,那么它将以31位表示,如果是负数,那么你必须从2^32中找到“completemet”。 在接受无符号变量的语言中,到二进制的转换可能是您所期望的,即32位的正常基转换。在此之前,如果您不熟悉逻辑运算符,可能需要阅读。 对于您的情况,存储一个4字节数组(32位是int的长度),并执行以下操作:


  • port=data[4]int和其他整数原语(java)使用2的补码表示法()存储。这意味着,如果你的数字是正数,将以31位表示,如果是负数,则必须从2^32中找到“completemet”。
    在接受无符号变量的语言中,到二进制的转换可能是您所期望的,即32位的正常基转换。在此之前,如果您不熟悉逻辑运算符,可能需要阅读。
    对于您的情况,存储一个4字节数组(32位是int的长度),并执行以下操作:


  • port=data[4]我错误地教导8个十六进制不是整数,这是错误的,它的编写方式是正确的


  • int-port=data[4]我错误地教导8个十六进制不是整数,这是错误的,它的编写方式是正确的


  • int-port=data[4]第一行中的括号与其他行中的模式不匹配……是的,第一行的计算结果为
    data[4]
    ,这可能不是正确的,但我也怀疑索引-数组应该从0开始(尽管上下文可能会使其合理)。如果您试图从该代码中学习,请不要这样做。第一行中的括号与其他行中的模式不匹配…是的,第一行的计算结果为
    数据[4]
    ,这可能不是正确的做法,但我也怀疑索引-数组应该从0开始(尽管这种情况可能会使其合理化)。如果您试图从该代码中学习,请不要。在使用Integer.toBinaryString找出您在逻辑和上执行的截断掩码后:
    0xFF000000
    将转换为
    0xF000
    0x00FF0000
    转换为
    0x0F00
    0x0000FF00
    转换为
    0x00F0
    0x000000FF
    0x000F
    。现在使用这些数字执行上面的逻辑谢谢,因此通过这段代码,最后一行代码应该用数据[1]覆盖数据[4]的内容,使其port=0x0(数据[3])(数据[2])(数据[1])?还有为什么需要以十六进制传递值,如果我更改“port”|(数据[1])行,会有任何区别吗&0x000000FF)“到”端口|(数据[1]&255)”考虑到JVM是Big-Endian且存在无法理解的长截短错误,我将提供一个更完整的解决方案。在使用Integer.toBinaryString找出那些是您在逻辑和上执行的截短掩码之后:
    0xFF000000
    将转换为
    0xF000
    0x00FF0000
    转换为
    0x0F00
    0x0000FF00
    0x00F0
    0x000000FF
    0x000F
    。现在使用这些数字执行上面的逻辑谢谢,因此通过此代码,最后一行代码应该用数据[1]覆盖数据[4]的内容,使其端口=0x0(数据[3])(数据[2])(数据[1])?还有,为什么必须以十六进制传递值,如果我将“port |(data[1]&0x000000FF)”行更改为“port |(data[1]&255)”,会有什么不同吗?考虑到JVM是Big-Endian,并且存在无法解释的长截断错误,我将提供一个更完整的解决方案。
    int port = data[4] << (24 & 0xFF000000);//data[]=byte array containing int value
    port = port | ((data[3] << 16) & 0x00FF0000);
    
    port = port | ((data[2] << 8) & 0x0000FF00);
    
    port = port | (data[1] & 0x000000FF);