我希望开发一个函数,将一系列 ASCII 字符(以其各自的十六进制表示形式)转换为单个十六进制值。例如,此函数的输入字符串可能是 {0x46 0x32 0x3A 0x42}(或 ASCII 中的 {F 2 0 B}),所需的输出将是单个整数十六进制值 0xF20B。
我尝试使用类型转换、sprintf 和位操作来开发一个函数,但没有成功。我认为可行的方法是将每个 ASCII 十六进制值类型转换为字符,将它们连接起来,然后将字符串转换为单个十六进制值。
C 确实有 stdlib.h atof 函数,可以将输入字符串转换为双精度浮点值。但是,此函数不接受字符,因此十六进制 A - F 值将无法正确转换。
提前感谢您的任何意见。
你可以自己写:
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"));
}