3

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

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。请问有什么建议吗?谢谢!

编辑

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

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

现在,我想添加这个字符串的格式(因为设备正在等待它),所以我在末尾添加它:41 42 43 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;
4

3 回答 3

3

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

byte[] content = {0x42, 0x43, 0x41, 0x42, 0x43, 0x7E, 0x06, 0x02};
于 2012-04-21T12:01:41.667 回答
2

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

如果您真的是指字符 0xB0(十六进制)或其他表示法 176 十进制,您可以这样做:

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

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


解释

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

在 ISO-8859-* 范围 160-255 中也是一个字符,一个字节。在 128-159 范围内,大部分是 UTF-8 控制字符,例如 ASCII 0-32。

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

于 2012-04-21T11:57:11.777 回答
0
hexString = String.format ("%x", 176); 

是另一种选择。

于 2012-04-21T12:23:32.680 回答