将十六进制转换为二进制在C语言中可以通过多种方法实现,以下是常用且高效的方法:
一、使用内置函数(推荐)
C语言标准库提供了`strtoul`函数,可方便地将十六进制字符串转换为无符号长整型,再通过位操作转换为二进制表示。
```c
include include int main() { char hexStr; printf("输入十六进制数: "); scanf("%99s", hexStr); // 限制输入长度为99 // 将十六进制字符串转换为无符号长整型 unsigned long hexValue = strtoul(hexStr, NULL, 16); // 计算二进制字符串长度(每2位十六进制对应8位二进制) int binLength = (sizeof(hexValue) * 8) / 8; // 分配内存存储二进制字符串 char *binStr = (char *)malloc(binLength + 1); if (!binStr) { printf("内存分配失败n"); return 1; } // 将十六进制值转换为二进制字符串 for (int i = sizeof(hexValue) * 8 - 8; i >= 0; i--) { binStr[i] = (hexValue & 0x03) + '0'; hexValue >>= 4; } binStr[binLength] = '0'; // 添加字符串结束符 printf("二进制结果: %sn", binStr); free(binStr); return 0; } ```
说明:
1. 使用`strtoul`函数将十六进制字符串转换为无符号长整型,基数为16。
2. 计算二进制字符串长度时,考虑到每2位十六进制对应8位二进制。
3. 通过位掩码`0x03`提取每2位十六进制对应的4位二进制,并存储到结果字符串中。
二、手动转换(按位操作)
通过遍历十六进制字符串的每一位,使用位操作将其转换为二进制表示。
```c
include include void hexToBin(const char *hexStr, char *binStr) { int len = strlen(hexStr); int binIndex = 0;
for (int i = 0; i < len; i++) {
char c = toupper(hexStr[i]);
switch (c) {
case '0': binStr[binIndex++] = '0000'; break;
case '1': binStr[binIndex++] = '0001'; break;
case '2': binStr[binIndex++] = '0010'; break;
case '3': binStr[binIndex++] = '0011'; break;
case '4': binStr[binIndex++] = '0100'; break;
case '5': binStr[binIndex++] = '0101'; break;
case '6': binStr[binIndex++] = '0110'; break;
case '7': binStr[binIndex++] = '0111'; break;
case '8': binStr[binIndex++] = '1000'; break;
case '9': binStr[binIndex++] = '1001'; break;
case 'A': binStr[binIndex++] = '1010'; break;
case 'B': binStr[binIndex++] = '1011'; break;
case 'C': binStr[binIndex++] = '1100'; break;
case 'D': binStr[binIndex++] = '1101'; break;
case 'E': binStr[binIndex++] = '1110'; break;
case 'F': binStr[binIndex++] = '1111'; break;
default: printf("无效字符: %cn", c); return;
}
}
binStr[binIndex] = '0'; // 添加字符串结束符
}
int main() {
char hexStr;
char binStr = {0}; // 足够存储最大32位十六进制数
printf("输入十六进制数: ");
scanf("%99s", hexStr); // 限制输入长度为99
hexToBin(hexStr, binStr);
printf("二进制结果: %s