现在我正在以这种方式将int转换为字节数组:
int num = 16777215;
char* bytes = static_cast<char*>(static_cast<void*>(&num));
这是最好的方法吗?
另外,如何从该数组中检索int值?
答案 0 :(得分:1)
如果你想要字节,你使用错误的演员:
char* bytes = reinterpret_cast<char*>(&num);
相反的方式:
int num = *reinterpret_cast<int*>(bytes);
请注意,通常您无法执行此操作,char
很特殊,因此您可能需要查找别名。
答案 1 :(得分:1)
回应
有没有办法将它直接投射到矢量?
你可以这样做:
#include <vector>
#include <cstdint>
template <class T>
std::vector<uint8_t> toByteVector(T value)
{
std::vector<uint8_t> vec = (std::vector<uint8_t>
(reinterpret_cast<uint8_t*>(&value),
(reinterpret_cast<uint8_t*>(&value))+sizeof(T))
);
dumpBytes<T>(vec);
return vec; // RVO to the rescue
}
// just for dumping:
#include <iostream>
#include <typeinfo>
#include <iomanip>
template <class T>
void dumpBytes(const std::vector<uint8_t>& vec)
{
std::cout << typeid(T).name() << ":\n";
for (auto b : vec){
// boost::format is so much better for formatted output.
// Even a printf statement looks better!
std::cout << std::hex << std::setfill('0') << std::setw(2)
<< static_cast<int>(b) << " "
;
}
std::cout << std::endl;
}
int main()
{
uint16_t n16 = 0xABCD;
uint32_t n32 = 0x12345678;
uint64_t n64 = 0x0102030405060708;
toByteVector(n16);
toByteVector(n32);
toByteVector(n64);
return 0;
}