在C 中解开包装数据包
Unpacking data packets in c++
我正在做UDP客户端服务器模型的事情,我的问题基本上归结为无法在此简短程序中打印数字65000。我得到的输出是: 0
struct pHeader{
uint16_t from = -1;
} pHead;
void formatPacket(pHeader header, char buffer[]) {
uint16_t u16;
u16 = header.from;
memcpy(buffer+2, &u16, 2);
}
int main () {
cout << "buffer" << endl;
char buffer[10];
pHead.from = 65000;
formatPacket(pHead, buffer);
cout << atoi(buffer+2) << endl;
}
我要做的下一件事是打印出一个也是16位数组的第一个元素中的值。我相信这样做是这样的:
.
.
.
buffer[2] = 0;
cout << atoi(buffer+0) << endl;
根据atoi()
的文档,如果无法执行有效的转换,它将返回零"。因此,您看到的零是atoi()
告诉您,在缓冲区中您给它的零是什么可以解释为数字的。
那是因为使用&u16
的CC_5填充了缓冲区的memcpy()
。u16
是65000,因此,假设一个小的架构,缓冲区[2]为 E8
,而缓冲区[3]为 FD
。这不是atoi()
可以解析的数字。
为了读取buffer[2]
的值,您需要进行memcpy()
的反面,这是另一个memcpy()
,如下:
uint16_t u16;
memcpy(&u16, buffer+2, 2);
cout << u16 << endl;
相关文章:
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- 发送固定大小的 UDP 数据包
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 在 c++ 中解析数据包数据的最佳方法是什么?
- 接受函数在发送数据包时等待
- 如何在 omnet++ 中发送自定义数据包?
- 数据包访问实践
- 在C++中创建一个简单的数据包路由器,如何跟踪"客户端"?
- 德拉吉诺 LG01-S 收到异常数据包并停止工作
- 将数据包从C++服务器发送到NodeJs服务器时出现MessagePack解码错误
- 使用C++将UDP数据包存储在Structure中
- C++-用与被包装数据相同的语法构造包装类
- FFmpeg av_read_frame从音频流返回数据包
- 为什么操作系统正在更改我的数据包的指定传出端口
- 是否可以将多个结构作为一个数据包存储在一个函数中,然后传递给其他函数并在那里提取?
- recvfrom 只收到几个数据包,之后它进入等待状态
- 如何调试由 C++ 编写的 npm 数据包
- 如何在INET的应用层中发送广播数据包
- 在C 中解开包装数据包