如何在 Java 中将内容为各个字节的十六进制值的字符串 [] 转换为 byte[]
How in Java to turn a string[] whose contents are hexidecimal values of individual bytes in to byte[]
我在 React-Native 与 NativeModules 交互时遇到一个问题,在 Java 中将字符串从 React-Native 传递到 Java 主机 trimmed 字符串 null字符。有问题的字符串是“R\u0000”,它在 Java 和 React-Native 中都表示正常。然而,当在两者之间进行类型转换时,空值被删除,只有“R”通过。
您可以想象在数字中 trim 尾随零是多么有趣,但这在字符串中是第二天性。这些字符串代表二进制序列,主要用于 BLE 通信,trimming 具有破坏性。
所以我想到将字符串中的每个字母解释为字符串数组中的十六进制值。在 JS 中,Uint8Array 从 [82,0](十进制)到 [52,0],然后作为字符串 ["52", "0"]。数组 ["52", "0"] 到达 Java 很好。
我在Java方面很弱,在这里很挣扎。我需要将这些内容为字节的十六进制值的字符串转换为 byte[].
试试这个。
public static void main(String[] args) throws IOException {
String[] input = {"52", "0"};
int length = input.length;
byte[] output = new byte[length];
for (int i = 0; i < length; ++i)
output[i] = (byte)Integer.parseInt(input[i], 16);
System.out.println(Arrays.toString(output));
}
输出:
[82, 0]
我在 React-Native 与 NativeModules 交互时遇到一个问题,在 Java 中将字符串从 React-Native 传递到 Java 主机 trimmed 字符串 null字符。有问题的字符串是“R\u0000”,它在 Java 和 React-Native 中都表示正常。然而,当在两者之间进行类型转换时,空值被删除,只有“R”通过。
您可以想象在数字中 trim 尾随零是多么有趣,但这在字符串中是第二天性。这些字符串代表二进制序列,主要用于 BLE 通信,trimming 具有破坏性。
所以我想到将字符串中的每个字母解释为字符串数组中的十六进制值。在 JS 中,Uint8Array 从 [82,0](十进制)到 [52,0],然后作为字符串 ["52", "0"]。数组 ["52", "0"] 到达 Java 很好。
我在Java方面很弱,在这里很挣扎。我需要将这些内容为字节的十六进制值的字符串转换为 byte[].
试试这个。
public static void main(String[] args) throws IOException {
String[] input = {"52", "0"};
int length = input.length;
byte[] output = new byte[length];
for (int i = 0; i < length; ++i)
output[i] = (byte)Integer.parseInt(input[i], 16);
System.out.println(Arrays.toString(output));
}
输出:
[82, 0]