簡體   English   中英

在C中將十六進制char數組轉換為u8數組

[英]Convert hexidecimal char array to u8 array in C

現在我有一個u8數組,我已成功將其轉換為十六進制char數組。 現在,嘗試將其改回u8陣列已經很麻煩了。 我嘗試了這段代碼:

        // DEMO:
        char *message = "0f236a1f";
        int i;
        u8 final[4];
        memset(final, 0, 4);
        char* part = "00";
        for (i = 0; i < 4; i++)
        {
            memcpy(part, &message[i*2], 2);
            u8 num = 0;
            sscanf(part, "%x", &num);
            printf("%i", num); 
            final[i] = num;
        }

我用值預填充了所有內容,以防止剩余內存值弄亂我實際數據中的大部分零。 盡管我已經嘗試了所有方法,但有時還是會分配錯誤的值,而且我找不到在線上執行相同操作的任何其他方法。 如果可以的話,請幫助我,我討厭C。

編輯:

我修改了代碼,現在顯示真實的東西,看是否有幫助。 巨型char *數組中的可變消息為464個零。 控制台偶爾仍會打印除零以外的數字,不確定為什么:

        int i;
        u8 final[232];
        memset(final, 0, 232);
        char part[3] = "00";
        part[2] = 0;
        for (i = 0; i < 232; i++)
        {
            memcpy(part, &message[i*2], 2);
            unsigned int num = 0;
            sscanf(part, "%x", &num);
            printf("%i", num); 
            final[i] = (u8)num;
        }

您正在使用以下行創建未定義的行為:

    char* part = "00";
    for (i = 0; i < 4; i++)
    {
        memcpy(part, &message[i*2], 2);
        ...
        sscanf(part, "%x", &num);

part指向只讀內存(這就是為什么在這樣的字符串中,我們通常將它們聲明為const char*從而在進行修改嘗試時導致編譯器錯誤)

您應該使用以下命令為字符串和空終止符分配足夠的空間:

char part[3] = "00";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM