Java将Int转换为Hex并将其粘贴在字节数组元素中
我已经开始学习一点java,并试图完成一项可能非常简单的任务,但我正在努力完成它 假设我有一个字节数组:Java将Int转换为Hex并将其粘贴在字节数组元素中,java,arrays,hex,byte,Java,Arrays,Hex,Byte,我已经开始学习一点java,并试图完成一项可能非常简单的任务,但我正在努力完成它 假设我有一个字节数组: byte[] test = {(byte) 0x0a, (byte) 0x01, (byte) 0x01, (byte) 0x0b}; 我想把test[3],最后一个值,当前是数字11(0b),改为随机值 Random generator = new Random(); int newTest3 = generator.nextInt(255); 现在我在newTest3中有了一些随机
byte[] test = {(byte) 0x0a, (byte) 0x01, (byte) 0x01, (byte) 0x0b};
我想把test[3],最后一个值,当前是数字11(0b),改为随机值
Random generator = new Random();
int newTest3 = generator.nextInt(255);
现在我在newTest3中有了一些随机数。我想将其转换为十六进制(FF),然后将其放入test的最后一个元素,或test[3]
在这方面我找不到太多的帮助,而且我在几个小时前刚刚学会了java,所以任何帮助都将是杰出的
提前感谢:)使用字节缓冲区
// elsewhere
import java.nio.ByteBuffer;
byte[] arr = new byte[4];
ByteBuffer buf = ByteBuffer.wrap(arr);
buf.putInt(generator.nextInt(255);
使用字节缓冲区
// elsewhere
import java.nio.ByteBuffer;
byte[] arr = new byte[4];
ByteBuffer buf = ByteBuffer.wrap(arr);
buf.putInt(generator.nextInt(255);
我不明白你为什么要这么麻烦。 使用已执行的显式强制转换:) 当你写作时:
byte[] test = {(byte) 0x0a, (byte) 0x01, (byte) 0x01, (byte) 0x0b};
0x0a实际上是显式转换为字节的整数。你也可以用newTest3做同样的事情
test[3] = (byte) newTest3;
请注意,这种类型的转换通常涉及数据丢失,因为字节仅为8位,int为32位。例如(FFFFFFFF将被转换为FF)。我不明白你为什么要这么麻烦。 使用已执行的显式强制转换:) 当你写作时:
byte[] test = {(byte) 0x0a, (byte) 0x01, (byte) 0x01, (byte) 0x0b};
0x0a实际上是显式转换为字节的整数。你也可以用newTest3做同样的事情
test[3] = (byte) newTest3;
请注意,这种类型的转换通常涉及数据丢失,因为字节仅为8位,int为32位。例如(FFFFFFFF将被转换为FF)。它不应该是
buf.put((byte)generator.nextInt(255))代码>?嘿!我对它进行了一些测试,但遇到了一点问题:它说buf.write方法“找不到符号”。有什么建议吗?@david,这是将字节转换成字节数组,而不是将int转换成字节数组。@GGati我很抱歉,我最近写了一个类,它使用了write,而不是我一直使用的put。正确的方法是“put int”。但请注意,每个int将使用4个字节(因为int有4个字节)。如果您只希望每个“int”有1个字节,那么这不是正确的选择。它不应该是buf.put((byte)generator.nextInt(255))代码>?嘿!我对它进行了一些测试,但遇到了一点问题:它说buf.write方法“找不到符号”。有什么建议吗?@david,这是将字节转换成字节数组,而不是将int转换成字节数组。@GGati我很抱歉,我最近写了一个类,它使用了write,而不是我一直使用的put。正确的方法是“put int”。但请注意,每个int将使用4个字节(因为int有4个字节)。如果您只希望每个“int”有1个字节,那么这不是正确的选择。因为他使用的是Random.nextInt(int)
调用的输出保证是从0
到255
,所以不会丢失任何内容。考虑到Quantum刚才所说的,这使得答案非常完美!非常感谢你们两位,以及这里的其他回答者:)@quantummechanical为了避免数据丢失,他应该使用“generator.nextInt(255)-128;”别忘了字节是有符号的8位数字,它不会丢失任何信息。记住,有符号与无符号的区别仅在于如何解释位模式,而不是位模式本身。如果你有字节b1=(字节)-1
和byte b2=(byte)255
您将发现(b1==b2)
是true
。如果将255映射到-1:),则会出现数据丢失,除非这是您希望程序执行的操作。因为他使用的是Random.nextInt(int)
调用的输出保证是从0
到255
,所以没有什么损失。考虑到Quantum刚才所说的,这使答案变得完美!非常感谢你们两位,以及这里的其他回答者:)@quantummechanical为了避免数据丢失,他应该使用“generator.nextInt(255)-128;”别忘了字节是有符号的8位数字,它不会丢失任何信息。记住,有符号与无符号的区别仅在于如何解释位模式,而不是位模式本身。如果你有字节b1=(字节)-1
和byte b2=(byte)255
您将发现(b1==b2)
是true
。如果将255映射到-1:),则会丢失数据,除非这是您希望程序执行的操作。将Int转换为hex没有任何意义。十六进制、十进制和二进制是Int的表示形式。您无法存储十六进制值。尽管名称不同,字节只是一个介于-128、127之间的数字。将Int转换为hex没有任何意义。hex、Decimal和binary是Int的表示形式。不能存储十六进制值。尽管名称不同,字节只是一个介于-128127之间的数字。