Java十六進製制與位元組陣列的相互轉換

2021-08-20 17:52:43 字數 1447 閱讀 5757

先獲取到十六進製制數字字串的長度,如果是奇數,在前面補個零;

使用字串的長度,計算出需要幾個位元組;

跟進位元組個數建立位元組陣列;

將字串轉換為字元陣列;

寫乙個迴圈,迴圈的次數為位元組陣列的長度

迴圈內是講字元轉換為位元組,並賦值給當前位元組陣列的位置

字元轉換為位元組的方法參考後邊chartobyte();

由於十六進製制的位元組是用二進位制的8位來表示的,它又分為高四位,與低四位,所以當我們拿到偶數字的位元組時,要將它左移4位(也就是乘以16),再與低四位的位元組進行邏輯運算或,才能表示乙個位元組的十六進製制。

給位元組陣列賦完值之後,返回即可。

private

byte

chartobyte(char c)

private

byte hexstrtobytes(string hexstr)

if(hexstr.lenth()%2 == 1)

int len = hexstr.length()/2;

byte result = new

byte[len];

char chars = hexstr.tochararrary();

for(int i=0;ibyte)(chartobyte(chars[i])<<4 | chartobyte(chars[i+1]));

}return result;

}

如果位元組陣列是空的,直接返回null;

建立乙個stringbuffer物件用來拼接字串;

遍歷位元組陣列;

讓每乙個位元組與0xff相與,得到乙個int值;為什麼要與(int)0xff相與,是因為最大的位元組也不會超過兩位的十六進製制資料(0xff)。

將得到的int值使用tohexstring()轉化為十六進製制的字串;

判斷得到的字串的長度看是否小於2,如果小於2,則在字串前面新增個0,;為什麼要看字串長度是否小於2,是因為如果該值小於16的話,只用乙個字元就可以表示,而乙個位元組是8位,乙個十六進製制的字元只能表示4位,所以乙個位元組必須用兩個十六進製制字元表示。

將所有的位元組轉換為十六進製制的字串之後,把它們拼接起來並返回。

private string bytestohexstr(btye bytes)

stringbuffer sb = new stringbuffer();

string strint = "";

for(int i=0;i0xff);

if(strint.length()<2)

}return sb.tostring

}

注意:

十六進製制字串一定要轉成大寫,不然會出錯誤,今天就是自己踩了這個坑。具體問題是將f轉化為位元組時,indexof()返回是-1,用十六進製制表示就是0xff。

ASCII 十六進製制 位元組陣列 字元陣列相互轉換

字串轉換為ascii param value return public static string stringtoascii string value else return sbu.tostring 字串轉換為ascii 字串轉換為十六進製制 param value return public...

byte位元組陣列與二進位制 十六進製制字串的轉換

byte陣列轉換為二進位制字串,每個位元組以 隔開 二進位制字串轉換為byte陣列,每個位元組以 隔開 public static byte binstrtobytearr string binstr return b 位元組陣列轉為十六進製制字串 1位元組對應2個16進製制字元 param byt...

位元組陣列與二進位制 十六進製制相互轉換

常用的一些轉換方法,整理如下,在程式設計中,用得比較多的是十進位制跟十六進製制,二進位制跟八進位製用的很少。namespace jerry.framework.socket.common 將位元組陣列節轉換成指定進製的字串 要轉換的字串 它必須是 2 或 16 public static strin...