在C语言中,将16进制转换为二进制主要有以下两种方法,具体实现方式如下:
一、手动转换法(逐位转换)
转换规则
将16进制的每一位数转换为对应的4位二进制数,具体对应关系如下:
- 0 → 0000
- 1 → 0001
- 2 → 0010
- 3 → 0011
- 4 → 0100
- 5 → 0101
- 6 → 0110
- 7 → 0111
- 8 → 1000
- 9 → 1001
- A/F → 1010/1011/1100/1101/1110/1111
示例代码
```c
include void hexToBinary(char hex) { switch(hex) { case '0': printf("0000"); break; case '1': printf("0001"); break; case '2': printf("0010"); break; case '3': printf("0011"); break; case '4': printf("0100"); break; case '5': printf("0101"); break; case '6': printf("0110"); break; case '7': printf("0111"); break; case '8': printf("1000"); break; case '9': printf("1001"); break; case 'A': printf("1010"); break; case 'B': printf("1011"); break; case 'C': printf("1100"); break; case 'D': printf("1101"); break; case 'E': printf("1110"); break; case 'F': printf("1111"); break; default: printf("Invalid"); break; } } int main() { char hex; printf("Enter a hexadecimal digit: "); scanf(" %c", &hex); hexToBinary(hex); return 0; } ```
二、自动转换法(字符串处理)
转换规则
将16进制字符串中的每个字符转换为对应的4位二进制数,然后将结果拼接。例如,"1A3F"转换为二进制为"0001101000111111"。
示例代码
```c
include include char *hexToBinaryString(const char *hexStr) { static char binaryStr[CHAR_BIT * sizeof(unsigned int) + 1]; unsigned int value = 0; int index = 0; for (int i = 0; hexStr[i] != '0'; i++) { int digit; switch(hexStr[i]) { case '0': digit = 0; break; case '1': digit = 1; break; case '2': digit = 2; break; case '3': digit = 3; break; case '4': digit = 4; break; case '5': digit = 5; break; case '6': digit = 6; break; case '7': digit = 7; break; case '8': digit = 8; break; case '9': digit = 9; break; case 'A': digit = 10; break; case 'B': digit = 11; break; case 'C': digit = 12; break; case 'D': digit = 13; break; case 'E': digit = 14; break; case 'F': digit = 15; break; default: return NULL; // 无效字符 } value = (value << 4) | digit; } for (int i = sizeof(value) * 8 - 1; i >= 0; i--) { binaryStr[index++] = (value >> i) & 1; if (i % 8 == 0) binaryStr[index++] = ' '; } binaryStr[index] = '0'; // 去除前导空格 while (binaryStr