首页  > 教育解读  > c语言中十六进制怎么转换成二进制

c语言中十六进制怎么转换成二进制

2025-05-04 02:56:04
做最好的自己
做最好的自己已认证

做最好的自己为您分享以下优质知识

在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 = 0; i--) {

binaryStr[index++] = (value >

>

i) & 1;

if (i % 8 == 0) binaryStr[index++] = ' ';

}

binaryStr[index] = '0';

// 去除前导空格

while (binaryStr