2015-04-15 28 views
0

所以我有一個運行的java服務器,期望來自我的arduino客戶端的數據。我的數據的原始類型是uint8_t,但我希望它作爲一個字符串。 這是我做我的轉換:在java中未識別uint8_t的字符串轉換

String stringData = (char*) data; 

其中「數據」是類型uint8_t數組。 我可以打印'stringData'的值,它看起來完全是我想要的,但是當它到達我的java服務器時,它顯示爲一個盒子裏面的小問號。有誰知道爲什麼?

P.S.當創建一個正常的字符串時它工作得很好(String stringdata =「123456」)所以我假設它與轉換有關。

下面是涉及代碼:

的Arduino:

void arduinoClient(String accountID) { 
    if (client.connect(ip, 9876)) { 
    client.println(accountID); 
    Serial.println("Message sent"); 
    } else { 
    Serial.println("connection failed"); 
    } 
} 

的Java:

BufferedReader buff = new BufferedReader(new InputStreamReader (socket.getInputStream()));  
String message = buff.readLine(); 

我還罰款與做在Java端轉換,如果它是更方便(或可能)這樣做

+0

請註明'data'類型,以及從哪裏獲得String類型,並舉例說明典型的'data'。 –

+0

'data'是一個uint8_t類型的數組。我不知道「你從哪裏得到字符串類型」是什麼意思。 'data'通過讀取NFC標籤進行初始化 – dks209

+0

您是否知道'data'的字符集和編碼? (或者,你打算使用「平臺默認值」來踢?) –

回答

1

我認爲這個問題與uint8_t reall有關y是。當你將它轉換爲char *時,你將它改爲數字的ACII value,而不是表示數字的實際字符。 This thread explains how to do the conversion.問題是Java試圖打印一個不存在的ASCII值。

+0

謝謝你指導我,但我有一些問題得到它的工作。我嘗試了那裏列出的兩個選項。這可能是我對C的經驗不足,這纔是真正的問題。我列出的第一個代碼出現錯誤,第二個出現二進制數字。 'malloc'行有錯誤,所以我必須使用'static_cast (malloc(buffer_size));'我不知道是否會導致問題。沒有簡單的方法嗎? – dks209

+0

我認爲這是最簡單的方法,使用位移實際上是從二進制數中獲得單個數字的最佳方法。你遇到了什麼錯誤? –

+0

錯誤:無法將參數'1'轉換爲'uint8_t * {aka unsigned char *}'將uint8_t(*)[16] {aka unsigned char(*)[16]}'轉換爲'char * convert(uint8_t * )''當我嘗試調用函數時發生這種情況(這屬於該線程中的第一個答案的發佈代碼)'char * theString; theString = convert(&data);' – dks209

0

看到這樣的代碼:

byte buf[31]; String myString = "MD111111111111111111111111111111111#(40)'"; uint8_t data[] = myString.StringToCharArray(buf,30);

這段代碼,我們可以將字符串轉換爲uint_8你的情況 你必須做到:

String stringData = (char*) data; byte buf[256]; uint_8 result = stringOut.StringToCharArray(buf,256);

+0

謝謝,但我實際上試圖以相反的方式做到這一點,將uint_8轉換爲String – dks209