在Java中,超过7F的十六进制到字符串中

时间:2012-04-21 11:41:16

标签: java string hex string-conversion

我需要在字符串中添加一些十六进制字符。我正在尝试这个:

content += Character.toString((char) Integer.parseInt(Integer.toHexString(originalSize).toString(), 16));

并且它正常工作,但当originalSize超过127(十六进制为7F)时,它会返回两个十六进制值。

例如,执行此操作:

content += Character.toString((char) Integer.parseInt(Integer.toHexString(176).toString(), 16));

结果是:(content hex numbers) C0 B0

B0是十六进制的176,但我不知道如何删除C0。有什么建议吗?谢谢!

修改

我想通过Bluetooth Low Energy向设备发送字符串。我有一个这样的字符串:

“ABCABC”。十六进制是41 42 43 41 42 43

现在,我想添加此字符串的格式(因为设备正在等待它),所以我在最后添加它:41 42 43 41 42 43 7E 06 02,其中:

  • 7E:格式化
  • 06:个字符数
  • 02:制造商提供的特定格式。

我有主字符串,我手动添加这三个十六进制字符。

SOLUTION:

根据Devon_C_Miller的回答,我找到了自己的解决方案:

contentFormated = new byte[originalSize+3];

for(int i=0;i<originalSize;i++){
    contentFormated[i] = content.getBytes()[i];
}

contentFormated[originalSize] = 0x7E;
contentFormated[originalSize+1] = (byte) 0xB0;
contentFormated[originalSize+2] = 0x02;

3 个答案:

答案 0 :(得分:3)

听起来你想要一个字节数组而不是字符串:

byte[] content = {0x42, 0x43, 0x41, 0x42, 0x43, 0x7E, 0x06, 0x02};

答案 1 :(得分:2)

在这里你可以忘记十六进制表示法,因为转换来回。

如果你的意思是字符0xB0(十六进制)或其他符号176十进制,你可以这样做:

int c = 176;
content += Character.toChars(c);

由于字符串是用Unicode编码的,因此可能会导致其他字节。 如评论中所述,如果您需要字节值,请使用byte []或更好ByteArrayOutputStream,使用write(176),最后使用toByteArray


说明

在ASCII范围0-127中,Character.toChars给出一个字符,以UTF-8表示,带有一个字节。

在ISO-8859- *范围160-255中也有一个字符,一个字节。 在128-159范围内,主要存在UTF-8控制字符,如ASCII 0-32。

但有些值用于UTF-8多字节编码。 较高的值256 -...可能会产生一个字符(16位)或几个字符。

答案 2 :(得分:0)

hexString = String.format ("%x", 176); 

是另一种选择。