【发布时间】:2016-04-22 16:10:16
【问题描述】:
我正在尝试在 C# 中构建一个 TCP 客户端,它将文件(主要是 MP3)传递给 Android 应用程序,但我在无符号字节和有符号字节之间转换时遇到了很大的困难。
我做错了什么导致应用程序检索到的值不匹配?
以下是 C# 通过 TCP 发送的数据。
new byte[] { 9, 1, 251, 252, 253, 254, 255, 254, 253, 252, 251, }
Java
while ((charsRead = in.read(buffer)) != -1)
{
serverMessage = new String(buffer).substring(0, charsRead);
serverByteMessage = serverMessage.getBytes();
for(int i = 0; i < serverByteMessage.length; i++) {
int bi = serverByteMessage[i] & 0xFF;
Log.e("TCP Client", "Item: " + serverByteMessage[i]);
Log.e("TCP Client", "Value of my test unsigned byte: " + bi);
}
}
Java 输出
Item: 9
Value of my test unsigned byte: 9
Item: 1
Value of my test unsigned byte: 1
Item: -17
Value of my test unsigned byte: 239
Item: -65
Value of my test unsigned byte: 191
Item: -67
Value of my test unsigned byte: 189
Item: -17
Value of my test unsigned byte: 239
Item: -65
Value of my test unsigned byte: 191
Item: -67
Value of my test unsigned byte: 189
Item: -17
Value of my test unsigned byte: 239
Item: -65
Value of my test unsigned byte: 191
Item: -67
Value of my test unsigned byte: 189
Item: -17
Value of my test unsigned byte: 239
Item: -65
Value of my test unsigned byte: 191
Item: -67
Value of my test unsigned byte: 189
Item: -17
Value of my test unsigned byte: 239
【问题讨论】:
-
没有不匹配。 Java 的字节总是有符号的。值为 239 的无符号字节与值为 -17 的有符号字节表示完全相同的值。您无需执行任何转换;将接收到的数据作为一个整体处理的函数(例如,解码 MP3 文件)将正确处理您的数据。
-
感谢您的评论。如果我将此字节写入文件并在十六进制编辑器中比较原始文件,这些文件不会有所不同吗? (我还没有测试过,所以我猜。;-))
-
不,它们不会不同。
标签: java c# byte unsigned signed