亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java ascii char的十六進制值出錯

java ascii char的十六進制值出錯

墨色風雨 2021-04-14 09:30:12
我有一個小問題,無法將十六進制值轉換為正確的char值。因此,我運行了Wireshark,每次捕獲到一個十六進制值。值就是這個(在wireshark原始數據中)。00383700177a0102081c42000000000000018fffffff7f030201000a080000000000000000184802000007080444544235508001000002080104所以現在我試圖將相同的命令發送到設備。我使用此代碼將十六進制轉換為asciiString hex4 = "00383700177a0102081c42000000000000018FFFFFFF7F030201000a080000000000000000184802000007080444544235508001000002080104";   StringBuilder output4 = new StringBuilder();   for (int i =0; i< hex4.length(); i +=2){       String str4 = hex4.substring(i, i+2);       System.out.println(str4);       output4.append((char)Integer.parseInt(str4, 16));   } bw3.write(output4.toString());  log.info(output4.toString());  bw3.flush();但是現在的問題是..當我在wireshark中捕獲自己發送的數據時,我得到了:00383700177a0102081c4200000000000001c28fc3bfc3bfc3bf7f030201000a08000000000000000018480200000708044454423550c2800100對于某些原因,我的代碼錯誤地發送了8f和ff數據。
查看完整描述

2 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

使用StringBuilder和BufferedWriter會強制從二進制轉換為文本,然后再轉換為二進制,但是沒有合理的理由進行文本轉換步驟。您傳輸的流是純二進制的,無法正確轉換為文本。因此,文本轉換步驟會導致流損壞。

在處理二進制數據流時,請不要使用與文本相關的類,而只能使用二進制。


查看完整回答
反對 回復 2021-04-28
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

您可以使用javax.xml.bind.DatatypeConverter將十六進制轉換為ascii。正如提到這個答案轉換十六進制的字符串轉換成ASCII在Java中后,你可以調用byte字符轉換成十六進制:


String hex4 = "00383700177a0102081c42000000000000018FFFFFFF7F030201000a080000000000000000184802000007080444544235508001000002080104";

byte[] s = DatatypeConverter.parseHexBinary(hex4);

System.out.println(new String(s));


查看完整回答
反對 回復 2021-04-28
  • 2 回答
  • 0 關注
  • 277 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號