gpt4 book ai didi

java - 如何在java中查找字符串中的字节索引

转载 作者:行者123 更新时间:2023-11-29 04:20:40 27 4
gpt4 key购买 nike

我有字符串,里面有0x80。字符串表示为:serialno,十六进制表示为 73 65 72 69 61 6C 6E 6F 80。我想从字符串中删除 0x80 而不将字符串转换为十六进制字符串。在 Java 中有可能吗?我尝试了 lastIndexOf(0x80)。但它返回 -1。

我的代码是(你也可以在 https://ideone.com/3p8wKT 上找到):

public static void main(String[] args) {

String hexValue = "73657269616C6E6F80";
String binValue = hexStringToBin(hexValue);
System.out.println("binValue : " + binValue);

int index = binValue.lastIndexOf(0x80);

System.out.println("index : " + index);
}

public static String hexStringToBin(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
}
return new String(data);
}

最佳答案

更改您的十六进制字符串方法以直接映射到字符。

char[] data = new char[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (char) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
}

return new String(data);

String 和 byte[] 之间的交换需要编码。

您的十六进制字符串似乎是字节/字符的字符串表示形式。看起来你有一个原始字符串 ->将它转换为你的十六进制字符串,但我们不知道编码。

如果要说每对字符映射到对应的字符,eg "80"-> char c = 0x80;然后你可以通过使用 char[] 来实现,它在创建字符串时不会被编码/解码。

如果您使用 byte[](如您在示例中所做的那样),那么它将被解码并且无效字符被映射到 0xFFFD,即 unicode replacement character .

关于java - 如何在java中查找字符串中的字节索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49425338/

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