C語言:直接可以用的16進制轉(zhuǎn)字符串&字符串轉(zhuǎn)16進制

1.16進制轉(zhuǎn)字符串

unsigned char unicode_number[22]={0x00,0x31,0x00,0x37,0x00,0x38,0x00,0x31,0x00,0x31,
                                0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x39,0x00,0x32,0x00,0x37};
unsigned char consumer_number[100]={0}; 
/***********************************************************************
* 功能:將一個十六進制字節(jié)串轉(zhuǎn)換成ASCII碼表示的十六進制字符串
* 輸入?yún)?shù):pHex----十六進制數(shù)字節(jié)串首地址
*                   pAscii---轉(zhuǎn)換后ASCII碼表示的十六進制字符串首地址
*                   nLen---要轉(zhuǎn)換的十六進制數(shù)長度(字節(jié)數(shù))
* 注:轉(zhuǎn)換后的結(jié)果全部是大寫ASCII碼表示的十六進制數(shù)
*此部分百度的
************************************************************************/
void HexToAscii(unsigned char *pHex, unsigned char *pAscii, int nLen)
{
    unsigned char Nibble[2];
    unsigned int i,j;
    for (i = 0; i < nLen; i++){
        Nibble[0] = (pHex[i] & 0xF0) >> 4;
        Nibble[1] = pHex[i] & 0x0F;
        for (j = 0; j < 2; j++){
            if (Nibble[j] < 10){            
                Nibble[j] += 0x30;
            }
            else{
                if (Nibble[j] < 16)
                    Nibble[j] = Nibble[j] - 10 + 'A';
            }
            *pAscii++ = Nibble[j];
        }               // for (int j = ...)
    }           // for (int i = ...)
}
void main(void) 
{
    //依舊用串口一進行實驗
    P3M0 = 0X00;
    P3M1 = 0X00;

    UART1_config();             //串口初始化
    uart1_printf("UART1 is good! \r\n");
    
    HexToAscii(unicode_number, consumer_number, 22);
    
    uart1_printf(consumer_number);
    while(1);
}

運行效果:

串口助手字符顯示

轉(zhuǎn)載來源:https://blog.csdn.net/sinat_41577729/article/details/86775583

2.字符串轉(zhuǎn)16進制

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

char *strCom = "1D1213AB6FC1718B19202122232425A6";

int StringToHex(char *str, unsigned char *out, unsigned int *outlen)
{
    char *p = str;
    char high = 0, low = 0;
    int tmplen = strlen(p), cnt = 0;
    tmplen = strlen(p);
    while(cnt < (tmplen / 2))
    {
        high = ((*p > '9') && ((*p <= 'F') || (*p <= 'f'))) ? *p - 48 - 7 : *p - 48;
        low = (*(++ p) > '9' && ((*p <= 'F') || (*p <= 'f'))) ? *(p) - 48 - 7 : *(p) - 48;
        out[cnt] = ((high & 0x0f) << 4 | (low & 0x0f));
        p ++;
        cnt ++;
    }
    if(tmplen % 2 != 0) out[cnt] = ((*p > '9') && ((*p <= 'F') || (*p <= 'f'))) ? *p - 48 - 7 : *p - 48;
    
    if(outlen != NULL) *outlen = tmplen / 2 + tmplen % 2;
    return tmplen / 2 + tmplen % 2;
}

int main(int argc, const char *argv)
{
    int cnt;
    unsigned char out[33];
    
    int outlen = 0;
    StringToHex(strCom, out, &outlen);
    for(cnt = 0; cnt < outlen; cnt ++)
    {
        printf("%02X ", out[cnt]);
    } 
    putchar(10); 
    return 0;
}

轉(zhuǎn)載來源:https://blog.csdn.net/zhemingbuhao/article/details/83111564

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容