安卓io流 接收16進製制位元組 出現負值

2021-10-01 06:43:19 字數 833 閱讀 6343

安卓開發中 接收電腦發來的16進製制資料出現負值 記錄一下

如圖 接收030407e20001020000de8d ,接受到的位元組陣列為

[3, 4, 7, -30, 0, 1, 2, 0, 0, -34, -115]

很顯然 出現負值

。對我只管印象就不對的 正常的acii碼來說

03 3

04 4

07 7

e2 -30..

下邊的就不一一舉例

我們知道e2的acii碼就是226啊 不是-30啊

我們轉換一下二進位制 來進一步解釋

16進製制

二進位制e2

‭11100010‬

明顯就是 226 啊 怎麼-30 出現負數我們肯定可以想到的就是反碼補碼知識

原碼表示 1110 0010 就是 2^7 + 2 ^ 6 +2 ^5 +2 ^1 =128 +64+32+2=226

但是機器的運算由於原碼和反碼的計算不方便 運用補碼計算

補碼表示 1110 0010 補碼第一位是符號位 其餘是原碼取反在加1

1110 0010 我們反計算原碼

符號位1

1100010

1代表負數相當於 -110 0010

110 0010 -1= 110 0001 110 0001是反碼

110 0001在取反求出原碼 001 1110 轉化為16進製制16+ 8+4+2=30

取符號 -30

所以問題就是編碼問題

詳細介紹原碼補碼參考這一篇。

安卓io流再回顧

之前學習io模糊模糊的,現在寫下,方便自己理解,和以後再熟悉輕鬆些。長期更新 以概念為主。在學習之前,我們需要了解位元組與字元的概念。字元流以字元 16 位二進位制 為單位進行處理,主要用於文字檔案等 unicode 資料。在這裡可以這樣簡單理解,例如漢字,漢字就是字元,涉及到漢字文字的用字元。在大...

socket 傳送接收16進製制資料

背景 做了個智慧型櫃管理系統,需要和智慧型櫃對接。互動使用的是socket。轉換邏輯 傳送規則 資料 1 16進製制 0x01 高4位 0x00 低四位 0x01 10進製 0 1 ansi碼 48,49 16進製制 0x30,0x31 傳送 ansi如圖 傳送接收資料 start為碼頭,end為碼...

php binary,php接收二進位製流

標籤 二進位製流生成檔案 post 無法解釋二進位製流,需要用到 globals http raw post data 或 php input globals http raw post data 和 php input 都不能用於 enctype multipart form data param...