【发布时间】:2020-05-30 20:06:41
【问题描述】:
我有一个四个字节的向量:
std::vector<int8_t> src = { 0x0, 0x0, 0x0, 0xa };,十六进制是。 (0x0000000a)
我如何将它输入到int32_t,以便使用reinterpret_cast 得到10?
这可以使用如下的位移轻松完成:
(int32_t)((src[offset] << 24) | (src[offset+ 1] << 16) | (src[offset+ 2] << 8) | (src[offset+ 3]));
但就我所知reinterpret_cast 的工作方式而言,它可以在这里发挥最佳作用,但我无法弄清楚代码本身是如何做到这一点的。
reinterpret_cast<int32_t*>(&0x0000000a);
ps:这不仅适用于 int32_t 左右,还可以重新解释为我想要的任何东西。这就是重点。
【问题讨论】:
-
取决于你的字节序,我猜。计算路线被视为禁区的任何原因?
-
@paxdiablo 大端,x64。我是在java中做到的,据我所知,它没有类型双关语机制。我猜我本可以在 C++ 中使用 reinterpret_cast 更轻松地做到这一点,但小伙子还没有弄清楚。
-
请注意,您实际上可以做到这一点的是 Java 使用
ByteBuffer-ByteBuffer.wrap(new byte [] { 0x0, 0x0, 0x27, 0x10 }).asIntBuffer().get() -
@greg-449 是的,我知道。问题是,我需要使用不安全的方法以我想要的方式“处理”字节。 reinterpret_cast 是使用 C++ 的方式,我很确定。但我无法弄清楚如何做到这一点的确切方法。我有字节流,我想将它们从向量重新解释为我想要的任何类型。
-
你试过
int32_t value = *(reinterpret_cast<int32_t*>(src.data()));吗?
标签: c++ casting reinterpret-cast