Java字节操作-将3字节转换为整数数据
我有一些字节int运算。但是我想不出问题所在 首先,我有一个十六进制数据,我把它作为一个整数保存Java字节操作-将3字节转换为整数数据,java,int,hex,bytearray,Java,Int,Hex,Bytearray,我有一些字节int运算。但是我想不出问题所在 首先,我有一个十六进制数据,我把它作为一个整数保存 public static final int hexData = 0xDFC10A; 我用这个函数把它转换成字节数组: public static byte[] hexToByteArray(int hexNum) { ArrayList<Byte> byteBuffer = new ArrayList<>(); while (t
public static final int hexData = 0xDFC10A;
我用这个函数把它转换成字节数组:
public static byte[] hexToByteArray(int hexNum)
{
ArrayList<Byte> byteBuffer = new ArrayList<>();
while (true)
{
byteBuffer.add(0, (byte) (hexNum % 256));
hexNum = hexNum / 256;
if (hexNum == 0) break;
}
byte[] data = new byte[byteBuffer.size()];
for (int i=0;i<byteBuffer.size();i++){
data[i] = byteBuffer.get(i).byteValue();
}
return data;
}
公共静态字节[]hextobyterarray(int hexNum)
{
ArrayList byteBuffer=新的ArrayList();
while(true)
{
add(0,(字节)(hexNum%256));
hexNum=hexNum/256;
如果(hexNum==0)中断;
}
字节[]数据=新字节[byteBuffer.size()];
对于(int i=0;i将整数转换为十六进制:Integer.toHexString()
要将hexString转换为整数:Integer.parseInt(“FF”,16);
您可以使用Java NIO的ByteBuffer:
byte[] bytes = ByteBuffer.allocate(4).putInt(hexNum).array();
反过来也是可能的。看一看
例如:
final byte[] array = new byte[] { 0x00, (byte) 0xdf, (byte) 0xc1, 0x0a };//you need 4 bytes to get an integer (padding with a 0 byte)
final int x = ByteBuffer.wrap(array).getInt();
// x contains the int 0x00dfc10a
如果您希望执行与C代码类似的操作:
公共静态int字节3点(最终字节[]字节3){
int res=0;
对于(int i=0;i<3;i++)
{
res*=256;
if(字节3[i]<0)
{
res+=256+字节3[i];//有符号到无符号转换
}否则
{
res+=字节3[i];
}
}
返回res;
}
这将为您提供以下值:
(byte3[0] & 0xff) << 16 | (byte3[1] & 0xff) << 8 | (byte3[2] & 0xff)
他想要的是字节[]而不是字符串。@Burkhard sting.getBytes()。或者,查看方法的内部实现总是有用的。这应该是最理想的。你是对的,我同意你的看法,但有时你必须这样做:P需要3字节而不是43字节不足以容纳int,你对额外的字节怎么办?此外,我可以将其更改为3字节,我需要更改返回int,我将只使用那种数据0xDA10AB、0xDFC10A..等等..@mismnc。如果您计划将来使用byte3point,您可能需要添加一些测试。类似于检查它是否真的是一个3字节数组。英语可能不是您的母语。请不要说“我希望您帮助我”除非你是认真的。这听起来很粗鲁和傲慢。下次你就知道了!谢谢你的纠正,我不是认真的。我将尝试不再使用@niklasrf。对于上面的示例,我已经尝试过,对于14663946 int值,返回704991对,hexToByteArray
方法以相反的顺序返回字节;请参见编辑。我可以问你一些问题吗ething,你能回顾一下我的第一个函数吗?你能像这样优化吗?再次感谢你!!
public static int byte3ToInt(final byte[] byte3) {
int res = 0;
for (int i = 0; i < 3; i++)
{
res *= 256;
if (byte3[i] < 0)
{
res += 256 + byte3[i]; //signed to unsigned conversion
} else
{
res += byte3[i];
}
}
return res;
}
(byte3[0] & 0xff) << 16 | (byte3[1] & 0xff) << 8 | (byte3[2] & 0xff)
byte3[0] = (byte)(hexData >> 16);
byte3[1] = (byte)(hexData >> 8);
byte3[2] = (byte)(hexData);