字节数组转int的解释
Explanation of byte array to int
这是我使用的代码:
byte[] arr = {127,12,-74,85,-3,0,-112,104,.........}; //size: 1024
ByteBuffer wrapped = ByteBuffer.wrap(arr);
short num = wrapped.getShort();
取自here
在我的应用程序中娱乐:
public void(byte[] bytes) {
byte[] arr = bytes;
ByteBuffer wrapped = ByteBuffer.wrap(arr); // big-endian by default
short num = wrapped.getShort(); // 1
Log.i("bytes",""+num);}
我有一个大小为 1024 字节的字节数组[1024],其中每个字节的值在 127 到 -128 之间。当我 运行 上面的代码时,对于每个大小为 1024 的字节数组,我得到 num
的值作为 -27356, 30647, 28033, -29854...
。我有很多字节数组,我在方法中传递。
我没看懂 num
的代码和值。这里发生了什么?
假设:
byte[] bytes={127,12,-74,85,-3,0,-112,104,.........} size: 1024
bytebuffer.wrap()
是做什么的?
- 如果我像这样放置字节:
bytebuffer.wrap(bytes)
,会发生什么?
- 什么是
getshort()
方法?它有什么作用?
num
值代表什么?
num
是否表示大小为 1024 的整个字节数组的单个整数值?
1)What does bytebuffer.wrap()do?
参见javadoc:将字节数组包装到缓冲区中。新缓冲区将由给定的字节数组支持;也就是说,对缓冲区的修改将导致数组被修改,反之亦然。新缓冲区的容量和限制将为 array.length,其位置将为零,其标记为未定义。它的支持数组将是给定的数组,它的数组偏移量将为零。
2)If i put bytes like this: bytebuffer.wrap(bytes),what will happen?
您得到 byte[]
支持的 ByteBuffer
。参见#1。
3)What is getshort() method?What does it do?
参见javadoc:读取此缓冲区当前位置的下两个字节,根据当前字节顺序将它们组合成一个短值,然后将位置递增 2。
4)What does "num" value represent?
从缓冲区读取的两个字节的有符号值。参见#3。
5)Is "num" representing single integer value of entire byte array of size 1024?
不是,代表两个字节的值。参见 #3 和 #4。
您可能还想了解 2 的补码:
What is “2's Complement”?(计算器溢出)
Two's_complement(维基百科)
1) bytebuffer.wrap() 有什么作用?
ByteBuffer.wrap 获取一个现有的 byte[] 并从中创建一个 ByteBuffer,公开对应于缓冲区关系操作的方法,例如 getShort()。
2) 如果我像这样放置字节:bytebuffer.wrap(bytes),会发生什么?
您将用 bytes 的内容而不是 arr 填充 ByteBuffer,可以说因为 arr 刚刚被分配给 bytes 之前,这将是一个好的操作。如果您打算稍后将字节用作原始值,但复制它是个好主意,但此代码中不存在。
3) getshort() 方法是什么?它有什么作用?
缓冲区包含恒定的字节流和当前位置。当您 getShort() 时,您从当前位置读取两个字节并将它们放入短结构中。如您问题下方的评论所示
If two byte values are hex 0x95,0x24, decimal -107,36, then short is
hex 0x9524, decimal -27356
这些被附加为 0x9524 所示,然后读出就好像它是一个短结构,而不是两个字节。这将删除一个符号位并将其视为数据位,如果第一个值为负,则为您提供一个大的负值。
4) "num"值代表什么?
如果不说显而易见的话,这很难回答。它表示由一个短数据组成的前两个字节。在您的第一个示例中,您使用
byte[] arr = { 0x00, 0x01 };
附加的是短的 0x0001,给你值 1。通常你创建的这个 "num" 变量在网络 I/O 数据包结构中这样使用,它通常表示字节数在第一个短片或数据包类型之后的数据包中,例如 "Game Data" 或类似的。
byte[] arr={127,12,-74,85,-3,0,-112,104,.........}
在这种情况下,它将首先读取字节 127 和 12。这些对应于 0x7F 和 0x0C,这将给出 "num" = 0x7F0C = 32524。当您使用不同的字节数组调用此方法时,只有第一个num.
中占了两个数
5) "num" 是否表示大小为 1024 的整个字节数组的单个整数值?
不,它只代表前面问题中显示的前两个字节。数组的大小只要大于 2(在正常系统上为 sizeof(short) = 2)就没有关系。
这是我使用的代码:
byte[] arr = {127,12,-74,85,-3,0,-112,104,.........}; //size: 1024
ByteBuffer wrapped = ByteBuffer.wrap(arr);
short num = wrapped.getShort();
取自here
在我的应用程序中娱乐:
public void(byte[] bytes) {
byte[] arr = bytes;
ByteBuffer wrapped = ByteBuffer.wrap(arr); // big-endian by default
short num = wrapped.getShort(); // 1
Log.i("bytes",""+num);}
我有一个大小为 1024 字节的字节数组[1024],其中每个字节的值在 127 到 -128 之间。当我 运行 上面的代码时,对于每个大小为 1024 的字节数组,我得到 num
的值作为 -27356, 30647, 28033, -29854...
。我有很多字节数组,我在方法中传递。
我没看懂 num
的代码和值。这里发生了什么?
假设:
byte[] bytes={127,12,-74,85,-3,0,-112,104,.........} size: 1024
bytebuffer.wrap()
是做什么的?- 如果我像这样放置字节:
bytebuffer.wrap(bytes)
,会发生什么? - 什么是
getshort()
方法?它有什么作用? num
值代表什么?num
是否表示大小为 1024 的整个字节数组的单个整数值?
1)What does bytebuffer.wrap()do?
参见javadoc:将字节数组包装到缓冲区中。新缓冲区将由给定的字节数组支持;也就是说,对缓冲区的修改将导致数组被修改,反之亦然。新缓冲区的容量和限制将为 array.length,其位置将为零,其标记为未定义。它的支持数组将是给定的数组,它的数组偏移量将为零。
2)If i put bytes like this: bytebuffer.wrap(bytes),what will happen?
您得到 byte[]
支持的 ByteBuffer
。参见#1。
3)What is getshort() method?What does it do?
参见javadoc:读取此缓冲区当前位置的下两个字节,根据当前字节顺序将它们组合成一个短值,然后将位置递增 2。
4)What does "num" value represent?
从缓冲区读取的两个字节的有符号值。参见#3。
5)Is "num" representing single integer value of entire byte array of size 1024?
不是,代表两个字节的值。参见 #3 和 #4。
您可能还想了解 2 的补码:
What is “2's Complement”?(计算器溢出)
Two's_complement(维基百科)
1) bytebuffer.wrap() 有什么作用?
ByteBuffer.wrap 获取一个现有的 byte[] 并从中创建一个 ByteBuffer,公开对应于缓冲区关系操作的方法,例如 getShort()。
2) 如果我像这样放置字节:bytebuffer.wrap(bytes),会发生什么?
您将用 bytes 的内容而不是 arr 填充 ByteBuffer,可以说因为 arr 刚刚被分配给 bytes 之前,这将是一个好的操作。如果您打算稍后将字节用作原始值,但复制它是个好主意,但此代码中不存在。
3) getshort() 方法是什么?它有什么作用?
缓冲区包含恒定的字节流和当前位置。当您 getShort() 时,您从当前位置读取两个字节并将它们放入短结构中。如您问题下方的评论所示
If two byte values are hex 0x95,0x24, decimal -107,36, then short is hex 0x9524, decimal -27356
这些被附加为 0x9524 所示,然后读出就好像它是一个短结构,而不是两个字节。这将删除一个符号位并将其视为数据位,如果第一个值为负,则为您提供一个大的负值。
4) "num"值代表什么?
如果不说显而易见的话,这很难回答。它表示由一个短数据组成的前两个字节。在您的第一个示例中,您使用
byte[] arr = { 0x00, 0x01 };
附加的是短的 0x0001,给你值 1。通常你创建的这个 "num" 变量在网络 I/O 数据包结构中这样使用,它通常表示字节数在第一个短片或数据包类型之后的数据包中,例如 "Game Data" 或类似的。
byte[] arr={127,12,-74,85,-3,0,-112,104,.........}
在这种情况下,它将首先读取字节 127 和 12。这些对应于 0x7F 和 0x0C,这将给出 "num" = 0x7F0C = 32524。当您使用不同的字节数组调用此方法时,只有第一个num.
中占了两个数5) "num" 是否表示大小为 1024 的整个字节数组的单个整数值?
不,它只代表前面问题中显示的前两个字节。数组的大小只要大于 2(在正常系统上为 sizeof(short) = 2)就没有关系。