将无符号字符*复制到无符号字符
Copy unsigned char * to unsigned char*
我需要保存数据包状态一段时间。因此,我读取了表示为无符号char*的数据包数据,然后用这些数据创建了一个记录,并将该记录保存在列表中一段时间。
这将是将记录中的数据包表示为char*或char[]的更好方法。
如何将读取的数据(无符号字符)复制到这两个选项:To unsigned char[]and To unsigned char*
我需要复制数据,因为每次我读取数据包时,它都会被读取到相同的字符*,所以当我保存一段时间时,我需要首先复制数据
如果数据包数据是二进制的,我更喜欢使用std::vector
来存储数据,而不是使用C strXXX
函数之一,以避免数据流中存在潜在的NULL字符问题。大多数strXXX
函数查找NULL字符并截断它们的操作。由于数据不是字符串,因此我也会避免使用std::string
来执行此任务。
std::vector<unsigned char> v( buf, buf + datalen );
向量构造函数将把所有数据从buf[0]
复制到buf[datalen - 1]
,并在向量超出范围时释放内存。可以使用v.data()
或&v[0]
获取指向底层缓冲区的指针。
因此,听起来您需要将多个数据包中的数据保存在列表中,直到将来某个时候。
如果是我,我通常会使用std::string或std::vector,因为这可以消除分配问题,而且通常速度非常快。
如果您确实打算使用char*或char[],那么您应该使用char*。声明一个像"char-buf[1024];"这样的变量会在堆栈上分配它,这意味着当该函数返回时,它就会消失。要将其保存在列表中,您需要动态分配它,因此您可以执行类似"char*buf=new char[packet.size];"的操作,然后复制数据并将指针和数据长度存储在列表中(或者,正如我之前所说,使用std::string,避免单独保留长度)。
如何复制数据?
可能是记忆。strcpy函数会遇到数据中可能有零字符的问题,这在网络环境中很常见。所以,类似于:
char *buf = new char[packet_length];
memcpy(buf, packet_data, packet_length);
// Put buf and packet_length into a structure in your list.
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 库特无符号字符
- 寻找一种更好的方法来表示无符号字符数组
- C++ 无符号字符 *{varName};-> C#
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 将浮点数转换为无符号字符数组并打印出来
- 在函数中返回无符号字符数组,但不返回指针
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 无符号字符打印其 ASCII 值
- 字符数组到无符号字符 *
- 是否可以在 c++ 中将两位数保存在无符号字符中