日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

把ASCII码的字符串转为数字的16进制

發布時間:2025/4/16 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 把ASCII码的字符串转为数字的16进制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*
函數名稱:AsciiStrToHexArray
功能:把ASCII碼的字符串轉為數字的16進制
參數dst:存儲16進制數組數據指針
參數src:存儲ASCII碼的字符串指針
返回值:16進制的數組數據長度
*/

int16_t AsciiStrToHexArray(uint8_t*dst,uint8_t*src)
{
? ?uint8_t ch;
? ?uint16_t index=0;

? ? if(strlen(src) == NULL)
? ? {
? ? ? ?return -1;
? ? }

? ? if(strlen(src)%2 == 0)//ASCII字符串偶數長度
? ? {
? ? ? ?for(index = 0;index < strlen(src);index++)
? ? ? ?{
? ? ? ? ? ?if((src[index]>='0')&&(src[index]<='9'))//數字0-9范圍
? ? ? ? ? ?{
? ? ? ? ? ? ? ch = src[index]-0x30;
? ? ? ? ? ?}
? ? ? ? ? ?else if((src[index]>='A')&&(src[index]<='F'))//大寫字母A-F范圍
? ? ? ? ? ?{
? ? ? ? ? ? ? ch = src[index]-0x37;
? ? ? ? ? ?}
? ? ? ? ? ?else if((src[index]>='a')&&(src[index]<='f'))//小寫字母,a-f范圍
? ? ? ? ? ?{
? ? ? ? ? ? ? ch = src[index]-0x57;
? ? ? ? ? ?}else{

? ? ? ? ? ? ??return -1;

? ? ? ? ? }?
? ? ? ? ? ?if(index%2 != 0)//下標從0開始,取余數不為0則是偶數長度的數據
? ? ? ? ? ?{
? ? ? ? ? ? ? dst[index/2]=dst[index/2]|ch;
? ? ? ? ? ? }else{
? ? ? ? ? ? ? dst[index/2]=ch<<4;
? ? ? ? ? ? }
? ? ? ?}
? ? ? ?return (index / 2);//整除,把除數作為16進制數組長度返回
? ? }else{//ASCII字符串奇數長度
? ? ? ?for(index = 0;index < strlen(src);index++)
? ? ? ?{
? ? ? ? ? ? if((src[index]>='0')&&(src[index]<='9'))//數字0-9范圍
? ? ? ? ? ? {
? ? ? ? ? ? ? ch = src[index]-0x30;
? ? ? ? ? ? }
? ? ? ? ? ? else if((src[index]>='A')&&(src[index]<='F'))//大寫字母A-F范圍
? ? ? ? ? ? {
? ? ? ? ? ? ? ch = src[index]-0x37;
? ? ? ? ? ? }else if((src[index]>='a')&&(src[index]<='f'))//小寫字母,a-f范圍
? ? ? ? ? ? {
? ? ? ? ? ? ? ch = src[index]-0x57;
? ? ? ? ? ? }

? ? ? ? ? ? else{

? ? ? ? ? ? ??return -1;

? ? ? ? ? ? }?

? ? ? ? ? ? if((index+1) == strlen(src))//奇數時,最后單獨一個字符轉為16進制后存儲緩存
? ? ? ? ? ? {
? ? ? ? ? ? ? ?dst[index/2] = ch;
? ? ? ? ? ? }else{//不是最后一個字符
? ? ? ? ? ? ? ? if(index%2 != 0)//下標從0開始,取余數不為0則是偶數長度的數據
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? dst[index/2]=dst[index/2]|ch;
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? dst[index/2]=ch<<4;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ?}
? ? ? ?return (index / 2+1);//不整除,把除數加1作為16進制數組長度返回
? ? }
}

int main()
{
? ? uint8_t str[]="1234567890abcdef"; //12 34 ab cd 0e
? ? uint8_t data[100];
? ? int16_t len = 0;

? ? memset(data,0,sizeof(data));

? ? len = AsciiStrToHexArray(data,str);

? ? if(len != -1)
? ? {
? ? ? ? for(uint8_t i = 0;i < len;i++)
? ? ? ? {
? ? ? ? ? ? printf("%0.2x ",data[i]);
? ? ? ? }
? ? }

? ? return 0;
}

程序運行結果如下:

總結

以上是生活随笔為你收集整理的把ASCII码的字符串转为数字的16进制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。