Java 将十六进制字符串转换为 java : char[] (C) to byte[] (JAVA)

标签 java c

如何在java中转换保持相同值的十六进制字符串。

在 C 中我有:

char tab[24] = { 0x02, 0x04, 0xF3, 0xFC, 0xFF, 0x06, 0x00, 0xF7, 0x00, 0x00, 0x09, 0xFD, 0xFD, 0x00, 0x03, 0x0A, 0xFD, 0x02, 0xFD, 0x08, 0x08, 0x00, 0x01, 0xFD };

然后我像字符串一样复制到java;

String hexString = "0x02, 0x04, 0xF3, 0xFC, 0xFF, 0x06, 0x00, 0xF7, 0x00, 0x00, 0x09, 0xFD, 0xFD, 0x00, 0x03, 0x0A, 0xFD, 0x02, 0xFD, 0x08, 0x08, 0x00, 0x01, 0xFD";

现在我想在 byte[] 中进行转换,我找到了一些方法,但看起来我没有以正确的格式进行转换。

已解决

String[] split = hexString.split(", ");       
byte[] arr = new byte[split.length];
for (int i = 0; i < split.length; i++)
{
    arr[i] = (byte)(short)Short.decode(split[i]);
}

最佳答案

如果您真的想将给定的字符串转换为 byte[](尽管这看起来是一个奇怪的要求)...

String hexString = "0x02, 0x04, 0xF3, 0xFC, 0xFF, 0x06, 0x00, 0xF7, 0x00, 0x00, 0x09, 0xFD, 0xFD, 0x00, 0x03, 0x0A, 0xFD, 0x02, 0xFD, 0x08, 0x08, 0x00, 0x01, 0xFD";
String[] split = hexString.split(", ");
byte[] arr = new byte[split.length];
for (int i = 0; i < split.length; i++)
{
   arr[i] = (byte)Short.parseShort(split[i].substring(2), 16);
}
System.out.println(Arrays.toString(arr));

我们需要使用 parseShort 而不是 parseByte 因为尝试用 parseByte 解析类似 0xF3 的东西会导致 NumberFormatException:值超出范围

打印:

[2, 4, -13, -4, -1, 6, 0, -9, 0, 0, 9, -3, -3, 0, 3, 10, -3, 2, -3, 8, 8, 0, 1, -3]

关于Java 将十六进制字符串转换为 java : char[] (C) to byte[] (JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18277599/

相关文章:

java - Delombok 每个功能一个 java 文件

java - 如何在 Spring Boot 中手动启动 Flyway

java - 查找是否使用双倍长度或三倍长度 3DES

java - Android VM 有命令行选项吗?

c - 为什么这些 "exported"变量是双重定义的?

python - 套接字 'No route to host' 错误

c - 在 C 上读取二进制 PGM

Java 2D : Render a very large amount of tiles on screen quickly

c - seccomp 系统调用陷阱函数中的指针返回值

c - 在 C 的同一行中读取字符串和各种整数