我的Socket客户端使用C语言编写,并以以下格式发送值:
x00\x2C\x02\x00\xE0\x00
现在,我想从用Java编写的TCP / IP套接字服务器中读取十六进制值。
在Java Socket中读取流值的方法应该是什么?
我正在尝试通过以下方式进行阅读,但无法正常工作:
InputStream ins = sock.getInputStream();
int byteRead;
while((byteRead = ins.read()) != -1) {
System.out.println(Integer.toHexString(byteRead & 0xFF));
}
首先说明显而易见的是,“ \ x41”是一个十六进制41(又称ASCII'A')的字节。C字符串也有一个终止符\x00
。所以你在写
\x00\x2C\x02\x00\xE0\x00
作为大小为6的char数组。将其写入字符串将写入一个空字符串,因为第一个字节为\x00
。
在Java方面,没问题\x00
,只是一个普通的字节/字符。
Java代码还可以。一个变化可能是:
try (InputStream ins = new BufferedInputStream(sock.getInputStream())) {
int byteRead;
while ((byteRead = ins.read()) != -1) {
System.out.printf("%02X%n", byteRead & 0xFF);
}
} // Closes
此处的大写X导致大写的十六进制和%na换行符。String.format
将是替代方案。
我的第一个猜测是C编写错误地puts
使用strlen
或使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句