Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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转换为Hex并将其粘贴在字节数组元素中_Java_Arrays_Hex_Byte - Fatal编程技术网

Java将Int转换为Hex并将其粘贴在字节数组元素中

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中有了一些随机

我已经开始学习一点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中有了一些随机数。我想将其转换为十六进制(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之间的数字。