如何在Java中将字符串转换为十六进制字节
我想将字符串中的两个字符分开,并将其转换为十六进制字节数组表示形式, 我只是不知道该怎么做 字符串a=十六进制a,十进制为10 字符串b=十六进制b,十进制为11如何在Java中将字符串转换为十六进制字节,java,android,string,hex,Java,Android,String,Hex,我想将字符串中的两个字符分开,并将其转换为十六进制字节数组表示形式, 我只是不知道该怎么做 字符串a=十六进制a,十进制为10 字符串b=十六进制b,十进制为11 String toConvert = "abbbbbbbbbbbbbbbbbbbbbbc"; byte[] output = new byte[12]; Input ab bb bb bb bb bb bb bb bb bb bb
String toConvert = "abbbbbbbbbbbbbbbbbbbbbbc";
byte[] output = new byte[12];
Input
ab bb bb bb bb bb bb bb bb bb bb bc
output
[-85, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -68]
Apache Common Codec的类正好满足您的需要:
byte[] bytes = Hex.decodeHex("abbbbbbbbbbbbbbbbbbbbbbc".toCharArray());
如果您不能/不会使用第三方,您可以随时“借用”它们的实现(稍微简化-为了简单起见,我省略了正确性检查):
公共静态字节[]解码十六进制(最终字符[]数据){
最终整数长度=data.length;
//句柄空字符串-为清晰起见省略
最终字节[]输出=新字节[len>>1];
//两个字符构成十六进制值。
对于(int i=0,j=0;j int f=字符。数字(数据[j],16)取两个字符组中的第一个字符,将其十六进制值乘以16
(位于161
位置)。该结果将添加到第二个字符的十六进制值
String toConvert = "abbbbbbbbbbbbbbbbbbbbbbc";
byte[] output = new byte[toConvert.length() / 2];
for (int i = 0; i < output.length; i++) {
output[i] |= Character.digit(toConvert.charAt(i * 2), 16) * 16;
output[i] |= Character.digit(toConvert.charAt(i * 2 + 1), 16);
}
String toConvert=“abbbbbbbbbbbbbbbbbbbbbbbbb”;
字节[]输出=新字节[toConvert.length()/2];
for(int i=0;i
用于(int i=0;i<12;i++){
输出[i]=(字节)整数.parseInt(toConvert.substring(i*2,i*2+2),16);
}
否我想要一个字节数组ass输出非字符串,其字符串为十六进制而非十六进制到字符串。您为一个24字符的字符串保留了12个字节?示例(ab)a是msb,b是lsb,我想把它们组合起来,在字符串a=hex a中转换成十六进制,在字符串b=hex b中转换成十进制的十进制,在字符串b=hex b中转换成十进制的十一进制,你是说在string toConvert
中?这是一个多么糟糕的例子!更好的string toConvert=“0344A7DF”;
。您将不会转换为十六进制,而是从十六进制表示进行解码。基本体没有方法。可能您指的是整数。valueOf
?不,我指的是我写的:)整数不是基本体。只要试着运行它,您就会看到。谢谢,这也是非常有用的helpful@Dima如果可以,我会运行它(不编译,因为上面已经说过了)。不鼓励只使用代码的答案。最好解释什么、为什么和如何。
String toConvert = "abbbbbbbbbbbbbbbbbbbbbbc";
byte[] output = new byte[toConvert.length() / 2];
for (int i = 0; i < output.length; i++) {
output[i] |= Character.digit(toConvert.charAt(i * 2), 16) * 16;
output[i] |= Character.digit(toConvert.charAt(i * 2 + 1), 16);
}
for(int i = 0; i < 12; i++) {
output[i] = (byte) Integer.parseInt(toConvert.substring(i*2, i*2+2), 16);
}