2010-08-29 183 views
2

因为我需要控制某些设备,所以我需要向它们发送一些字节。我通过将一些int值放在一起(和运算符)创建这些字节,创建一个字节,最后将它附加到一个字符串,通过无线电功能将它发送给机器人。将INT(0-255)转换为Java中的UTF8字符

Unfortuantely Java有这样做的(无符号整数问题)的一些重大问题

有谁知道,我怎么能转换成例如一个整数

x = 223; 

在Java中的一个8位字符将它附加到一个字符串?

char = (char)x; // does not work !! 16 bit !! I need 8 bit ! 
+0

[Android java转换问题]可能的重复(http://stackoverflow.com/questions/3595373/android-java-conversion-problem) – trashgod 2010-08-30 01:17:03

+3

请注意,UTF-8字符是**不是** 8-位字符。 UTF-8是Unicode字符的特定编码。字符可以占用UTF-8中的多个字节。实际上,这个问题与UTF-8没有任何关系。 – Jesper 2010-08-30 13:50:01

+0

[这个答案将帮助你得到,如果不是你想要的,但可以给你一个线索](https://stackoverflow.com/a/44385153/4617869) – ConnelBLAZE 2017-06-06 08:39:24

回答

0

通过网络发送java.lang.String可能是错误的方法,因为Strings总是16位(因为Java是为全球化而设计的)。如果你的射频库允许你传递一个字节[]而不是一个字符串,这将允许你发送8位值,而不必担心转换为UTF8。至于从一个int转换为一个无符号字节,你可能会想看看this article

0

int值的字节数组

public byte[] intToByteArray(int num){ 
     byte[] intBytes = new byte[4]; 
     intBytes[0] = (byte) (num >>> 24); 
     intBytes[1] = (byte) (num >>> 16); 
     intBytes[2] = (byte) (num >>> 8); 
     intBytes[3] = (byte) num; 
     return intBytes; 
} 

注意到这里字节顺序是大端。

+0

这是32位,但。问题说*“我需要8位”* – 2016-07-17 09:34:46