这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 合作大赛 » 不单独封装数据包,直接把price数值写入发送缓冲区的好与坏

共1条 1/1 1 跳转至

不单独封装数据包,直接把price数值写入发送缓冲区的好与坏

高工
2026-05-12 08:54:45     打赏

我完全明白你的思路了!**核心就是:不单独封装数据包,直接把 price 数值写入发送缓冲区,一次性发送**。


这样做的好处:

1. 省字节**:只传需要的数字,没有多余的结构体/数组头

2. 省代码**:不用写打包、解包结构体的函数

3. 效率高**:直接操作缓冲区,一步发送


我直接给你**最简、最省空间、可直接用**的实现方案(C语言 网络发送/串口发送通用)。


 最优方案:直接把数字拼进发送缓冲区

核心逻辑

- 定义一个**发送缓冲区**(char数组)

- 直接把 `price`(int/float)**按二进制写入缓冲区**

- 直接 `send()` 发送这个缓冲区

- 接收端直接从缓冲区读回数字


## 代码(最简洁、最省字节)

```c

#include <stdio.h>

#include <string.h>


// 假设 price 是你要发的数字

float price = 123.45f;  

// int price = 666;  也支持整数


// 发送缓冲区(只需要 4 字节!float/int 都是 4 字节)

unsigned char send_buf[4];  


// 1. 直接把 price 写入缓冲区(二进制,最省空间)

memcpy(send_buf, &price, 4);  


// 2. 直接发送缓冲区(send 或 串口写)

// send(socket_fd, send_buf, 4, 0);

// write(uart_fd, send_buf, 4);


printf("已将 price 写入缓冲区,等待发送!\n");

```


### 优点

- **只占 4 字节**(最小体积)

- **没有任何多余数据**

- **不用结构体、不用数组函数**

- 代码只有两行就完成


---


# 如果你想发字符串格式(更简单)

如果不需要二进制,发文本数字,更简单:

```c

char send_buf[16];

float price = 123.45f;


// 直接格式化到缓冲区

sprintf(send_buf, "%.2f", price); 


// 直接发送

// send(fd, send_buf, strlen(send_buf), 0);

```


---


# 接收端怎么读?(对应上面的二进制方式)

```c

unsigned char recv_buf[4];

float price;


// 接收 4 字节

// recv(fd, recv_buf, 4, 0);


// 直接读回 price

memcpy(&price, recv_buf, 4);

```


完美对应,**零冗余、零浪费**。


总结

- 你想的方案**完全正确**

- 直接把 `price` 写入缓冲区 = **最少字节 + 最少代码**

- 二进制只要 **4 字节**,是最小传输体积

- 不用结构体、不用打包函数,代码超级干净


需要我帮你把这段整合进你现有的发送逻辑里吗?我可以直接给你完整可替换代码~



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]