用C语言写出将字符串转为二进制数组
时间: 2023-08-04 08:12:59 浏览: 143
下面是一个将字符串转换为二进制数组的 C 代码示例:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
printf("请输入一个字符串: ");
scanf("%s", str);
int len = strlen(str);
int binlen = len * 8; // 字符串长度乘以8,得到二进制数组的长度
int binary[binlen];
memset(binary, 0, sizeof(binary)); // 初始化数组
for (int i = 0; i < len; i++) {
for (int j = 0; j < 8; j++) {
binary[i * 8 + j] = (str[i] >> j) & 1; // 逐位转换
}
}
printf("转换后的二进制数组为: ");
for (int i = 0; i < binlen; i++) {
printf("%d", binary[i]); // 输出二进制数组
}
printf("\n");
return 0;
}
```
要注意的是,这个代码示例中默认输入的字符串长度不超过100,如果输入的字符串过长,需要对代码进行修改以避免数组越界等问题。
相关问题
用C语言写出一个将字符串转为二进制数组的函数
下面是一个将字符串转为二进制数组的函数的C语言代码实现:
```c
void str2bin(char* str, int len, int* bin) {
int i, j;
for (i = 0; i < len; i++) {
for (j = 0; j < 8; j++) {
bin[i * 8 + j] = (str[i] >> (7 - j)) & 1;
}
}
}
```
其中,`str`为输入的字符串,`len`为字符串的长度,`bin`为输出的二进制数组。函数会将字符串中每个字符转换为8位二进制数,存储到`bin`中。由于C语言中不支持返回动态数组,因此我们使用传入指针的方式来输出结果。
使用示例:
```c
#include <stdio.h>
int main() {
char str[] = "hello, world!";
int len = sizeof(str) - 1; // 减去字符串末尾的'\0'
int bin[len * 8];
str2bin(str, len, bin);
int i;
for (i = 0; i < len * 8; i++) {
printf("%d", bin[i]);
}
printf("\n");
return 0;
}
```
输出结果为:
```
0110100001100101011011000110110001101111001000000111011101101111011100100110110001100100
```
MODBUS ASCII解码 C语言
MODBUS ASCII是一种基于ASCII字符集的通信协议,常用于工业控制系统之间的数据交换。在C语言中,解析MODBUS ASCII需要将接收到的一组字符序列转换成有意义的数据。以下是一个简单的步骤概述:
1. **读取输入串**:从串行端口或网络接收一连串的字符,比如"03 00 07 FF",代表一个典型的MODBUS请求。
2. **分隔处理**:根据MODBUS协议规定,数据通常由功能码、寄存器地址和值组成。例如,第一字符通常是功能码(如"03"表示读取线圈状态),接下来是两个字节的地址,然后是一字节的长度字段。
3. **ASCII解码**:将每个字符转换为对应的数字,如'0'转为0,'3'转为3等。注意区分大小写字母和数字,并考虑结束符'\r'和'\n'。
4. **解析地址和值**:提取出地址和实际的数据内容。地址可能是十进制的,而数据则需要按照协议解析其含义(比如二进制还是十六进制)。
5. **构建结果**:将解析后的信息组合成结构体或数组,以便进一步处理。
以下是一个简单的C语言函数示例,用于解码单次请求:
```c
#include <stdio.h>
typedef struct {
uint8_t function_code;
uint16_t register_address;
uint8_t value;
} ModbusRequest;
ModbusRequest parse_modbus_ascii(char* input) {
// 解码并获取字段
char function = input[0];
uint8_t address = (input[1] - '0') * 256 + (input[2] - '0');
uint8_t length = input[3];
// ...后续处理...
return (ModbusRequest){function, address, length};
}
int main() {
char request[] = "03 00 07 FF";
ModbusRequest parsed_request = parse_modbus_ascii(request);
printf("Function code: %d\n", parsed_request.function_code);
// ...其他字段的处理...
return 0;
}
```
阅读全文