C:數組轉換十六進制式的字符串輸出。

ESP8266由於需要用到MD5加密,加密過後的數據是一個數組,需要把這個數組以十六進制的形式通過網絡接口發送出去。

由於網絡接口不能使用printf函數,不能使用%02x之類的格式轉換。所以就先把數組變成字符串,然後再發送。

重要的一個細節:轉換完成後末尾一定要加上 \r\n  !!! 否則無法當做字符串處理。

比如MD5加密過的數組爲:RawData[6] = {159,36,153,181, 234, 222};

輸出的字符串爲: “9f2499b5eade”, 剛好是MD5加密密文


這裏十六進制長度最大爲兩位,若爲3位,需要多對16進行一次取整。

void  DataTransfrom()

{

char  RawData[6] = {159,36,153,181, 234, 222}; //原始數組

char  TransformData[20]={}; //轉換過的字符串

char temp1,temp2,i;

for(i=0;i<6;i++)

{

temp1 = RawData[i]/16;

temp2 = RawData[i]%16;

if( temp1  < 10)

TransformData[2*i] = '0'+temp1 ;

else

TransformData[2*i] = 'a'+temp1 -10;

if(temp2 < 10)

TransformData[2*i+1] = '0'+temp2 ;

else

TransformData[2*i+1] = 'a'+temp2 - 10 ;

}

TransformData[2*i+2] = '\r';

TransformData[2*i+3] = '\n';

}


這是對照ACILL碼進行的一個處理,不知道可有什麼更好的辦法?比如用sprintf格式化輸出,能不能實現數組變成16進制的字符串?

否認在

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章