
墨香传道为您分享以下优质知识
在C语言中,将字符串转换为二进制表示的方法主要有以下两种:
一、字符转二进制字符串(逐字符转换)
将每个字符的ASCII码转换为8位二进制数,通常以空格或特定分隔符分隔。
实现方法
- 使用循环遍历字符串中的每个字符,通过位运算(如 `t & 1`)提取二进制位,并存储到缓冲区。
- 示例代码(字符转8位二进制):
```c
include
include
void char2bits(char ch) {
char buf = {0};
int n = 7;
while (t >
0) {
buf[n] = '0' + (t & 1);
t >
>
= 1;
n--;
}
buf = '0';
printf("%sn", buf);
}
int main() {
char s[] = "example";
while (*s) {
char2bits(*s++);
}
return 0;
}
```
二、整型转二进制字符串(按位处理)
核心思路
将整数转换为二进制字符串,适用于需要固定长度二进制表示的场景(如32位、64位)。
实现方法
- 使用 `sprintf` 或 `itoa` 函数直接转换,或手动按位操作填充缓冲区。
- 示例代码(32位整数转二进制):
```c
include
include
include
void int_to_binary(int n, char *buf, int bits) {
int i = bits - 1;
while (n >
0) {
buf[i] = (n & 1) + '0';
n >
>
= 1;
i--;
}
buf[bits] = '0';
}
int main() {
int num = 1024;
char binary;
sprintf(binary, "%032s", binary); // 32位补零
printf("i=%d, bs=%sn", num, binary);
return 0;
}
```
三、十六进制转二进制(扩展场景)
若需将十六进制字符串转换为二进制,可结合 `strtol` 函数实现:
```c
include
include
include
int main() {
char hex_str[] = "0x1A";
char binary_str;
long int num = strtol(hex_str, NULL, 16);
sprintf(binary_str, "%064b", num); // 64位二进制
printf("Hex: %s, Binary: %sn", hex_str, binary_str);
return 0;
}
```
总结
字符转二进制:
适用于单个字符处理,推荐使用位运算逐位提取。
整型转二进制:适用于固定长度二进制表示,推荐使用 `sprintf` 或手动位操作。
十六进制转二进制:需结合 `strtol` 函数转换后再格式化输出。