C ASCII 到 Hex (atoh) 函数

问题描述 投票:0回答:1

我希望开发一个函数,将一系列 ASCII 字符(以其各自的十六进制表示形式)转换为单个十六进制值。例如,此函数的输入字符串可能是 {0x46 0x32 0x3A 0x42}(或 ASCII 中的 {F 2 0 B}),所需的输出将是单个整数十六进制值 0xF20B。

我尝试使用类型转换、sprintf 和位操作来开发一个函数,但没有成功。我认为可行的方法是将每个 ASCII 十六进制值类型转换为字符,将它们连接起来,然后将字符串转换为单个十六进制值。

C 确实有 stdlib.h atof 函数,可以将输入字符串转换为双精度浮点值。但是,此函数不接受字符,因此十六进制 A - F 值将无法正确转换。

提前感谢您的任何意见。

c hex bit-manipulation ascii atof
1个回答
0
投票

你可以自己写:

unsigned long long strtohex(const char *str)
{
    unsigned long long result = 0;
    char *hex = "0123456789ABCDEF";
    while(*str)
    {
        result *= 0x10;
        char *pos = strchr(hex, toupper(*str++));
        if(pos) result += pos - hex;
    }    
    return result;
}

int main(void)
{
    printf("%llx\n", strtohex("aB03543Cdf"));
}

https://godbolt.org/z/9s6xn33s8

© www.soinside.com 2019 - 2024. All rights reserved.