我需要在字符串中添加一些十六进制字符。我正在尝试这个:
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;
答案 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);
是另一种选择。