Mar*_*rts 6 java arrays hex bytearray
我试图用两个字节的数组表示端口号9876(或十六进制的0x2694):
class foo {
public static void main (String args[]) {
byte[] sendData = new byte[1];
sendData[0] = 0x26;
sendData[1] = 0x94;
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个关于可能会失去精确度的警告:
foo.java:5: possible loss of precision
found : int
required: byte
sendData[1] = 0x94;
^
1 error
Run Code Online (Sandbox Code Playgroud)
如何在不丢失精度的情况下在两个字节的数组中表示数字9876?
注意:我选择@Björn的代码作为正确的答案,但@glowcoder的代码也运行良好.这只是解决同一问题的另一种方法.谢谢你们!
我的第一个答案是位移,但转念一想,我认为使用输出流可能更好、更容易理解。我通常会避免强制转换,但如果您不寻求通用解决方案,我想那也没关系。:)
使用流,一个通用的解决方案:
public byte[] intToByteArray(final int i) throws java.io.IOException {
java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();
java.io.DataOutputStream d = new java.io.DataOutputStream(b);
d.writeInt(i);
d.flush();
return b.toByteArray();
}
Run Code Online (Sandbox Code Playgroud)
并扭转它:
public int byteArrayToInt(final byte[] b) throws IOException {
java.io.ByteArrayInputStream ba = new java.io.ByteArrayInputStream(b);
java.io.DataInputStream d = new java.io.DataInputStream(ba);
return d.readInt();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8740 次 |
最近记录: |