安卓開發中 接收電腦發來的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...