2010-08-29 45 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