2015-01-15 28 views
0

我正在处理一个套接字连接,其中我发送并接收字节。我有套接字代码写,我可以发送和接收字节,但有一个赶上...字节的传入数据

我发送数据称为德尔福语言,然后在android代码中接收它们。但是我遇到了一些问题。

在delphi中,一个字节的最大值是255,而在Android中,最大字节是127.你如何解决这个问题?有没有办法使用无符号字节?我应该使用短裤而不是字节吗?

任何帮助表示赞赏。

回答

1

要读取单个字节,您可以将其转换为较大的Java/Android原始类型,以通过使用8位掩码执行按位&(AND)将其解释为无符号值。要将值作为无符号字节值写入套接字,请使用较大的基本类型来设置该值,然后将此值转换为一个字节以写入套接字。例如:

short shortVal = 255; 
    byte byteVal = (byte) shortVal; 
    System.out.println("signed value = " + byteVal); 
    shortVal = (short) (byteVal & 0xFF); 
    System.out.println("unsigned value = " + shortVal); 

的Java/Android的解释字节作为带符号的值(在这种情况下,-1),但在字节(11111111)8位仍然是一样的,在至少显著8位短255(0000000011111111)。

同样的技术可以用于更大的类型(使用int 16位掩码将short解释为无符号长整型,32位掩码将int解释为无符号长整型),但对于多字节值,要小心考虑字节序的网络协议,并根据需要转换字节顺序。

相关问题