【发布时间】:2012-07-08 11:52:08
【问题描述】:
我需要在前两个字节中发送消息的长度。
计算了消息长度,结果是 752,比如十六进制的 02F0。现在我需要计算出对应于这个十六进制值的特殊符号。 为了得到我使用的那些
int num1 = Integer.parseInt("F0", 16);
char c1 = (char) num1;
得到 -> ð 第一个字符在那里不可见(由于编码),但我确实得到了正确的字符。无论如何,但是当我将这些特殊字符连接到最终消息字符串(以 ASCII 格式)时,它会从 02F0 变为 023f(通过在 ultraedit hex 视图中读取最终消息来确认)。为什么会这样? 3F 是十进制的 63,我看到以下代码 sn-p 也发生了同样的事情->
Charset asciicharset = Charset.forName("ASCII");
Charset iso88591charset = Charset.forName("ISO-8859-1");
byte [] a = new byte[]{(byte)0x02, (byte)0xF0};
ByteBuffer inputBuffer = ByteBuffer.wrap(a);
CharBuffer data = asciicharset .decode(inputBuffer);
ByteBuffer outputBuffer = asciicharset .encode(data); --> This is where instead of 240
for F0 I get 63, in fact I tried with any value more than 63 but it always comes back to
that
byte[] outputData = outputBuffer.array();
任何帮助将不胜感激。 谢谢。
【问题讨论】:
-
这是否准确:您需要将消息的长度作为前两个 8 位字符发送,但整个消息(包括长度)作为 ASCII 字符串发送?
-
好的 - 你知道 Java 字符串是 16 字节的 Unicode,而不是 8 位的 ASCII,对吗?您可以读取和写入字符串,并在字符串和字节缓冲区之间进行转换,使用您希望的任何“编码”。例如:
String myString = new String(myByteArray, "utf-8")。或byte[] myByteArray = myString.getBytes("utf-8") -
@GregKopff 是的,这是正确的。但从我收到的示例请求消息来看,前两个字节由我在帖子中提到的特殊字符组成。
标签: java encoding hex ascii iso-8859-1