gpt4 book ai didi

c++ - 将整数转换为字符数组,然后再将其转换回来

转载 作者:行者123 更新时间:2023-11-30 02:20:58 24 4
gpt4 key购买 nike

我对转换在 C++ 中的工作方式有点困惑。
我有一个 4 字节的整数,我需要将其转换为 char[32],然后在其他函数中将其转换回。

我正在做以下事情:

uint32_t v = 100;
char ch[32]; // This is 32 bytes reserved memory
memcpy(ch,&v,4);
uint32_t w = *(reinterpret_cast<int*>(ch)); // w should be equal to v

我在我的编译器上得到了正确的结果,但我想确定这是否是正确的方法。

最佳答案

从技术上讲,没有。您有可能违反 CPU 的对齐规则(如果有的话)。

您可以使用 char* 逐字节地为对象添加别名, 但你不能使用实际的 char数组(无论其值来自何处)并假装它是其他对象。

你会看到 reinterpret_cast<int*>方法很多,并且在许多系统上它似乎都可以工作。然而,“正确”的方法(如果你真的需要这样做的话)是:

const auto INT_SIZE = sizeof(int);
char ch[INT_SIZE] = {};

// Convert to char array
const int x = 100;
std::copy(
reinterpret_cast<const char*>(&x),
reinterpret_cast<const char*>(&x) + INT_SIZE,
&ch[0]
);

// Convert back again
int y = 0;
std::copy(
&ch[0],
&ch[0] + INT_SIZE,
reinterpret_cast<char*>(&y)
);

( live demo )

请注意,我只假装 int是一堆char s,永远不要反过来。

另请注意,我还交换了您的 memcpy类型安全 std::copy (尽管因为我们无论如何都要对类型进行核对,所以这是顺便说一句)。

关于c++ - 将整数转换为字符数组,然后再将其转换回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49179127/

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