gpt4 book ai didi

java - 从 Java 中的 HEX 字符串创建 ISO-8859-1 字符串,移位位

转载 作者:行者123 更新时间:2023-11-29 04:03:50 25 4
gpt4 key购买 nike

我正在尝试将 HEX 序列转换为以 ISO-8859-1、UTF-8 或 UTF-16BE 编码的字符串。也就是说,我有一个看起来像这样的字符串:"0422043504410442"这代表字符:"Test"在 UTF-16BE 中。

我用来在两种格式之间进行转换的代码是:

private static String hex2String(String hex, String encoding) throws UnsupportedEncodingException {
char[] hexArray = hex.toCharArray();

int length = hex.length() / 2;
byte[] rawData = new byte[length];
for(int i=0; i<length; i++){
int high = Character.digit(hexArray[i*2], 16);
int low = Character.digit(hexArray[i*2+1], 16);
int value = (high << 4) | low;
if( value > 127)
value -= 256;
rawData[i] = (byte) value;
}
return new String(rawData, encoding);
}

这对我来说似乎工作得很好,但我仍然有两个问题:

  1. 有没有更简单的方法(最好没有位处理)来进行这种转换?
  2. 我该如何解释这行:int value = (high << 4) | low;

我熟悉位处理的基础知识,但对 Java 语法完全不熟悉。我相信第一部分将所有位向左移动 4 步。尽管其余的我不明白以及为什么在这种情况下它会有所帮助。

对于我的问题中的任何混淆,我深表歉意,如果我需要澄清任何内容,请告诉我。谢谢。//Abeansits

最佳答案

有没有更简单的方法(最好没有位处理)来进行这种转换?

我不知道 - 唯一的简化似乎是一次解析整个字节而不是逐位解析(例如使用 int value = Integer.parseInt(hex.substring(i * 2, i * 2 + 2), 16);)

public static byte[] hexToBytes(final String hex) {
final byte[] bytes = new byte[hex.length() / 2];
for (int i = 0; i < bytes.length; i++) {
bytes[i] = (byte) Integer.parseInt(hex.substring(i * 2, i * 2 + 2), 16);
}
return bytes;
}

我该如何解释这一行:int value = (high << 4) |低;?

请查看此示例以了解您的最后两位数 (42):

int high = 4; // binary 0100
int low = 2; // binary 0010
int value = (high << 4) | low;

int value = (0100 << 4) | 0010; // shift 4 to left
int value = 01000000 | 0010; // bitwise or
int value = 01000010;
int value = 66; // 01000010 == 0x42 == 66

关于java - 从 Java 中的 HEX 字符串创建 ISO-8859-1 字符串,移位位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1631440/

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