簡體   English   中英

GLib API 將十六進制字符串轉換為 ASCII 字符串?

[英]GLib API to convert hexadecimal string to ASCII string?

我不敢相信在 GLib 中沒有 API 可以做到這一點,現在我只發現人們在做自己的轉換,比如這里這里(函數名為“解碼”) 我真的很想在一個簡單的 GLib 調用中找到一種方法,但如果沒有辦法,上述方法對我不起作用,因為前者是 C++(我使用的是 C/GObject)和后者似乎不能完美地工作(我對結果的長度有疑問)。

TIA

如前所述,這有點不常見。 如果你有一個足夠短的十六進制字符串,你可以在它前面加上0x並使用strtoll() 但是對於任意長度的字符串,這里是 C function:

char *hex_to_string(const char *input)
{
    char a;
    size_t i, len;
    char *retval = NULL;
    if (!input) return NULL;

    if((len = strlen(input)) & 1) return NULL;

    retval = (char*) malloc(len >> 1);
    for ( i = 0; i < len; i ++)
    {
        a = toupper(input[i]);
        if (!isxdigit(a)) break;
        if (isdigit(a)) a -= '0';
        else a = a - 'A' + '\10';

        if (i & 1) retval[i >> 1] |= a;
        else retval[i >> 1] = a<<4;
    }
    if (i < len)
    {
        free(retval);
        retval = NULL;
    }

    return retval;
}

我不是 100% 確定您所說的“十六進制字符串”是什么意思,但可能這個線程會有所幫助。

暫無
暫無

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

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