c语言串口中文编码,C语言 串口传输 结构体

串口传输 结构体 就是 把结构体 转换为 数组 ,然后传输 数组中的 char。

即 struct - - - - - - ->> char [ ] ;

然后 char[ ] - - - -- - - - -->> struct 。

给出一下简单实例代码 :

#include

#include

#include

struct data{

int id;

int score;

char name[10];

};

#define SIZE sizeof(struct data)

void struct_array(char* des, struct data *src)

{

int num;

char *temp = (char *)src ;

for(num=0; num

*(des+num)= temp[num];

}

void array_struct(struct data * des ,char * src)

{

int num;

char* temp = (char *)des;

for(num=0; num

*(temp++) = src[num];

}

void show_array(char *str ,int len )

{

while(len--)

{

putchar('|');

putchar(*str++);

}

printf("|\n");

}

int main()

{

printf("struct size %d\n",SIZE);

struct data *shm = (struct data *)malloc(SIZE);

shm->id=1;

shm->score=98;

strcpy(shm->name, "admin");

char buf[SIZE]={"\0"};

struct data *str = (struct data *)malloc(SIZE);

struct_array(buf, shm);

show_array(buf , SIZE);

array_struct(str, buf);

printf("%d\n%d\n%s\n", str->id, str->score, str->name);

free(shm);

free(str);

return 0;

}

运行结果:

f468a4c622f14018b9a58372de04f704.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式C语言中,结构体组帧发送通常用于数据通信,特别是在网络协议、串口通信或无线通信中。结构体(struct)是自定义的数据类型,可以包含多个不同类型的成员变量,而组帧(packet framing)则是将这些结构体打包成特定格式的数据包以便于传输。 以下是一个基本的步骤和概念: 1. 定义结构体:首先,你需要创建一个结构体来定义你要发送的数据格式。例如,如果要发送的是传感器读数,可能包含时间戳、温度和湿度等字段。 ```c typedef struct { uint32_t timestamp; float temperature; float humidity; } SensorData; ``` 2. 组帧格式:设计一个固定的或者可变长度的帧格式,比如使用定长的头尾标识符,中间放结构体的二进制表示。 ```c #define FRAMING_START_BYTE 0x7E #define FRAMING_END_BYTE 0x7E #define DATA_PACKET_LENGTH sizeof(SensorData) + 2 // 包含头尾字节 void packSensorData(SensorData data, uint8_t* buffer) { buffer[0] = FRAMING_START_BYTE; // 开始标志 uint8_t* ptr = buffer + 1; // 避开开始标志 // 序列化结构体到缓冲区 memcpy(ptr, &data, sizeof(data)); *ptr++ = data.temperature * 256.0f; // 可能需要浮点数到整数转换 *ptr++ = data.humidity * 256.0f; // 同上 buffer[*ptr] = FRAMING_END_BYTE; // 结束标志 } ``` 3. 发送数据:将打包好的数据发送到指定的接口,如UART、SPI或网络套接字。 ```c void sendData(SensorData data) { uint8_t frame[DATA_PACKET_LENGTH]; packSensorData(data, frame); sendToPeripheral(frame, DATA_PACKET_LENGTH); // 这里是实际的发送函数 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值