gpt4 book ai didi

java - 将十六进制字符串转换为类对象

转载 作者:行者123 更新时间:2023-11-29 09:58:42 24 4
gpt4 key购买 nike

我有这样一个类:

public class Fields implements java.io.Serializable{
public short ID;
public int SSN;
public long Number;
}

我有一个十六进制字符串,其值如下,每 2 个字符代表一个字节:

String str="1000180018000540AC80D6487653E5000100D40B7900D4C3FFF2FAFF8985";

现在我想在这样的模式中将这个字符串转换为上面的类对象:

//ID has short type so we need 2 bytes
ID=4096; //(decimal value of 1000)

//SSN has integer type so we need 4 bytes
SSN=402659328; //(decimal value of 18001800)

//Number has long type so we need 8 bytes
Number=378492038049986131; //(decimal value of 0540AC80D6487653)

此转换可以在 c++ 中使用 <reinterpret_cast> 实现如此容易,但作为 Is there cast in Java similar to in C++问题是,我可以用java中的序列化来实现它。我认为当我们首先将一个类对象序列化为字节数组时可以使用序列化,其次我们可以将获得的字节反序列化为原始类对象,这与我的建议有点不同,因为我有一个字符串(比如字节),我想反序列化它。那我该怎么做呢?

最佳答案

Java 序列化具有非常特定的数据格式,它无法帮助您解析使用不同的预定义格式获得的数据。但是a ByteBuffer可用于解析此类数据。

首先,您需要将字符串转换为实际的 byte[] 数组。我将使用来自 this answer 的简单解决方案, 请随意选择另一个更适合您的示例的:

byte[] data = DatatypeConverter.parseHexBinary(str);
ByteBuffer buffer = ByteBuffer.wrap(data);

buffer.order(ByteOrder.LITTLE_ENDIAN); // maybe!

short id = buffer.getShort();
int ssn = buffer.getInt();
long number = buffer.getLong();

是否需要 order() 调用取决于数据的字节顺序。ByteBuffer 默认为 BIG_ENDIAN,因此您如果那是你需要的,可以只留下那个电话。

关于java - 将十六进制字符串转换为类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54458118/

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