Java中超过7F的十六进制转换为字符串

Java中超过7F的十六进制转换为字符串,java,string,hex,string-conversion,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(In

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

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));
结果是:
(内容十六进制数)C0 B0

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

编辑

我想通过蓝牙低能量向设备发送字符串。我有这样一个字符串:

“ABCABC”。十六进制是
414243

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

  • 7E
    :指定格式
  • 06:
    字符数
  • 02
    :制造商提供的特定格式
我有主字符串,我手工添加这三个十六进制字符

解决方案:

根据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;
contentformatted=新字节[originalSize+3];

对于(inti=0;i这里您可以忘记十六进制表示法,因为转换是来回的

如果您真正指的是字符0xB0(十六进制)或其他表示法176十进制,您可以按照以下方式执行:

int c = 176;
content += Character.toChars(c);
由于字符串是用Unicode编码的,因此可能会产生其他字节。 如注释中所述,如果需要字节值,请使用byte[]或更好的方法,使用
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位)或几个字符。

听起来您想要的是字节数组而不是字符串:

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

是另一个选项。

“我需要在字符串中附加一些十六进制字符。”听起来你马上就开始糟糕了。你说的“十六进制字符”到底是什么意思?我想你的意思是你有二进制数据,它以某种编码表示文本。什么编码?你对编码有多熟悉?@JonSkeet让我澄清我的问题:)听起来你想处理二进制数据。那你为什么用字符串呢?请记住,在Java中,字符串是Unicode的,所以字符与字节不对应。@FranVerona:使用完整代码这样做会很有帮助。附加到字符串的结果是一个字符串,而不是“内容十六进制数”(这可能意味着许多事情之一)。我只需要在字符串的末尾添加一些十六进制字符,这样我就可以进入十六进制,添加我想要的,然后返回新字符串。当我尝试向数组中添加大于127(即0xB0)的大小时出现的问题。解决了!谢谢你的回答:)
hexString = String.format ("%x", 176);