c++ - 如何将结构转换为 char[] 数组?

标签 c++ casting struct bytearray

我有一个 Blah 类型的变量。

我想将其转换为 char[sizeof(blah)],而不进行复制。
我需要类型转换足够强大以实例化需要 char[N] 的模板。

我尝试了很多东西,但我不太明白。
我希望这样的东西能够正常工作:

class Blah {
 int a;   
};


template <typename T>
void foo (T& a) 
{ 
    //Not an array
}

template <int N>
void foo (char(&a)[N]) 
{ 
    //an array!
}

Blah b;
foo(b); //not an array
foo((char[sizeofBlah])b); //hopefully treated as an array

最佳答案

你不能执行这样的转换,那没有意义。您可以做的是获取对象的地址并将该地址重新解释为字节地址:

char* const buf = reinterpret_cast<char*>(&obj);

这应该可以满足您的要求,但要注意使用术语“cast to char[]”,因为它会混淆正在发生的实际操作。

当然你也可以将地址解释为固定大小缓冲区的起始地址:

using buffer_t = char[sizeof(Blah)];
buffer_t* pbuf = reinterpret_cast<buffer_t*>(&obj);

但请注意,您仍在使用指向此处缓冲区的指针

关于c++ - 如何将结构转换为 char[] 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15505045/

相关文章:

c++ - Microsoft Visual C++ 6.0 中的断点

c++ - 在 C++ 上的 Win32 控制台中绘图?

c++ - 将成员函数指针转换为 TIMERPROC

c - realloc 二维结构体数组

c++ - 无法使用 Boost Units 确定编译器错误的解决方案

c++ - 按值传递

python - 研究 Pandas DataFrame 中的不同数据类型

c - 如何使用 fgets() 来避免转换它的第二个 int 类型的参数?

c - 如何区分初始化结构和未初始化结构?

swift - 我一遍又一遍地使用相同的代码块。我如何巩固它?