gpt4 book ai didi

java - 将我的 32 字符 int 转换为 32 字节数组,就像 Java 中一样

转载 作者:行者123 更新时间:2023-12-01 07:22:00 25 4
gpt4 key购买 nike

我想知道如何将 32 个字符 int 转换为所表示的 32 字节数组。

示例:

我有这个整数:

int test = 123456789;

我想把它变成这样:

byte[] Write_Page_Four = new byte[] {  

(byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x01, (byte) 0x23, (byte) 0x45,
(byte) 0x67, (byte) 0x89};

目前,我正在考虑将 int 除以 2,然后手动将它们分配给字节数组,但这样做遇到了一些麻烦,而且我相信这不是解决我的问题的最佳实践。

这就是我的 ATM,它返回错误,但仍在继续工作,我可以使用一些建议:

String test2 = "01";
String test1 = "0x"+test2;
byte test = Byte.valueOf(test1);
System.out.println("teeeeest-----"+test);

byte[] Write_Page_Four = new byte[] {(byte) test};

这个返回一个错误:

java.lang.NumberFormatException: For input string: "0x01"

最佳答案

是什么导致了问题

Byte.valueOf 不像 Java 编译器那样解析数据:它期望输入为十进制数。

但是,您可以使用具有任意基数的 Byte.valueOf(String,int) 。在这种情况下,您可以使用以下方法解决它:

byte test =  Byte.valueOf(test2,16); //using test2, not test1

注意不要在前面添加"0x"。然而,这是一种低效的方法。

整数是 32 位,而不是 32 字节

第二个问题是您声明可以将像 12345678901234567890123456789011 这样的数字存储到 int 中。你不能。 int 有 32 个。这意味着它的表示仅限于或多或少的 2.1B。所以我认为你的意思是你将 12345678901234567890123456789011 存储在 String 中?

数字系统

请注意,数字12345678901234567890123456789011在内部不会表示为(byte) 0x12, (byte) 0x34,...,除非您使用的是二进制编码小数点。这是因为计算机使用二进制数字系统(因此用十六进制表示对字节进行分组),而人类使用十进制表示。例如,123456789 将表示为 0x07,0x5B,0xCD 0x15

使用字节数组序列化 int(或其他数据结构)

您可以使用 this codeint (和其他数据类型)转换为字节数组:

ByteBuffer b = ByteBuffer.allocate(4);
b.putInt(test);
byte[] result = b.array(); //result will be 4 bytes,
//since you can represent any int with four bytes.

或者,如果您想像这样表示 int ,您可以使用以下方法:

int t = test;
byte[] dat = new byte[5];//at most 5 bytes needed
for(int j = 4; test != 0; j--) {
int rm = t%100;
dat[j] = (byte) (rm%10+((rm/10)<<8));
t /= 100;
}
//result is dat

关于java - 将我的 32 字符 int 转换为 32 字节数组,就像 Java 中一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34136803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com