gpt4 book ai didi

c++ - 如何将 int 复制到 u_char*

转载 作者:太空宇宙 更新时间:2023-11-04 06:48:23 24 4
gpt4 key购买 nike

我有一个 u_char* 动态数组,其中包含一些网络数据包的二进制数据。我想用一些整数值更改数据包中的目标端口号。假设数据包内的端口号偏移量为ofs,长度为4字节。

我尝试了以下两种方法:

u_char* packet = new u_char[packet_size]; // Packet still empty

// Read packet from network ...

int new_port = 1234;

方法#1:

std::copy((u_char*)&new_port, (u_char*)&new_port+4, packet+ofs);

方法#2:

std::string new_port_str = std::to_string(new_port);
auto new_port_bytes = new_port_str.c_str();
std::copy(new_port_bytes, new_port_bytes+4, packet+ofs);

这两种方法都为端口号提供垃圾值(但数据包的其余部分没问题)。谁能帮帮我?

最佳答案

您必须将整数从您的平台碰巧使用的任何内部表示形式转换为您使用的特定网络协议(protocol)要求它们在通过网络发送时采用的格式。

这取决于您尝试使用的特定网络协议(protocol)——请检查其文档以准确了解端口表达所需要的格式。我敢打赌它是网络字节顺序。您可能有像 htons 这样的函数来将短裤转换为网络字节顺序。

另一个问题——int 在您的平台上有多少字节?网络协议(protocol)使用多少字节来表示端口?我敢打赌,数字分别是 4 和 2。所以这是另一个问题。 (或者可能不是。我不确定 int 在您的平台上有多少字节,也不知道您尝试使用什么协议(protocol),所以我不得不猜测.)

您不能随便编写代码并期望它能正常工作。您必须考虑您要尝试做什么并了解要求。

我的建议是查看您正在使用的网络协议(protocol)的规范,并准确找出数据中的哪些字节必须更改以及它们必须更改为什么。然后根据网络协议(protocol)规范编写代码将每个字节更改为正确的值。这将确保您的代码在任何平台上都能正常工作。

关于c++ - 如何将 int 复制到 u_char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54855530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com