c++ - C++ 中的 void 算术

标签 c++ void-pointers

我有一个结构:

struct {
  Header header;
  uint32_t var1;
  uint32_t var2;
  char var3;
  char var4[4];
};

你明白了。问题是我正在通过网络接收字节数组,我首先必须先解析 Header。所以我首先先解析头部,然后我必须解析其余的结构。

我试过了,

void* V = data;  // which is sizeof(uint32_t) * 2 + sizeof(char) * 5

然后尝试像 (V)、V+sizeof(uint32_t) ... 等那样解析它

但它给出了编译器错误。我如何通过网络解析该结构的其余部分?

最佳答案

C++ 中的基本数据单位是 char。它是可以寻址的最小类型,根据定义它的大小为 1。此外,语言规则特别允许将所有数据视为字符序列。所有 I/O 都以字符序列(或流)的形式发生。

因此,您的原始数据缓冲区应该是一个char 数组。

(另一方面,void * 在 C++ 中有非常具体和有限的用途;它的主要目的是指定一个对象在内存中的地址。例如, operator new() 的结果是一个 void *。)

关于c++ - C++ 中的 void 算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10612118/

相关文章:

C++ 17在逗号上拆分constexpr字符串并在编译时具有元素数量?

gcc - 警告 : cast to/from pointer from/to integer of different size

c - 我需要/可以在 C 中释放一个空指针吗?

c - makecontext函数指针[错误: invalid use of void expression]

c++ - 为什么 myString.at(myString.length()) 不起作用?

c++ - 将 Makefile 项目转换为 Cmake

c++ - 光线追踪 vector

c - 你如何在 C 中将 void 指针转换为 char 指针

c - 如何将 void 指针转换为 float 以在 C 函数中使用?

c++ - 连接 QTreeWidgetItem 时出错