我完全明白你的思路了!**核心就是:不单独封装数据包,直接把 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 字节**,是最小传输体积
- 不用结构体、不用打包函数,代码超级干净
需要我帮你把这段整合进你现有的发送逻辑里吗?我可以直接给你完整可替换代码~
我要赚赏金
