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進制的字符串?
否認在