我需要一个函数将 32 位或 24 位有符号(二进制补码)十六进制字符串转换为长整数。需要在 32 位和 64 位机器上工作(不管 long int 的大小)并且无论机器是否是二进制补码机器都可以工作。
解决方案:
long int hex2li (char hexStr[], int signedHex)
{
int bits = strlen (hexStr) * 4;
char *pEnd;
long long int result = strtoll (hexStr, &pEnd, 16);
if (pEnd[0] == '\0')
{
if (signedHex)
{
if (result >= (1LL << (bits - 1))) result -= (1LL << bits);
}
return (long int) result;
}
return LONG_MIN;
}