![](/img/trans.png)
[英]How to “cast” a std::vector<char> to std::vector<wchar_t>
[英]vector<char> to int vs. vector<wchar_t> to int
所以我有以下功能:
template < typename T >
void SomeClass::ReadBinary(T& Res)
{
size_t sBytesToRead = sizeof(T);
Res = 0;
std::vector<char> vcBuffer(sBytesToRead);
m_Fstream.read(&vcBuffer[0], sBytesToRead);
// tbd - use reintepert_cast
Res = reinterpret_cast<T>(&vcBuffer[0]);
}
其中m_Fstream
是std::fstream
。
此功能按预期工作。 但是,当我将m_Fstream
更改为std::wfstream
并稍微调整函数时:
template < typename T >
void SomeClass::ReadBinary(T& Res)
{
size_t sBytesToRead = sizeof(T);
Res = 0;
std::vector<wchar_t> vcBuffer(sBytesToRead); // type of vector changed
m_Fstream.read(&vcBuffer[0], sBytesToRead);
// tbd - use reintepert_cast
Res = reinterpret_cast<T>(&vcBuffer[0]);
}
我得到不同的结果(意味着Res
int值不同)。 我有点希望在这里有问题。 在两种情况下,从文件读取字节很可能会有所不同。
我有点迷茫,不知道该如何解决。 任何想法?
T
为: uint8_t
, uint16_t
和uint32_t
如果要从流中读取二进制值,则需要这样做:
template < typename T >
void SomeClass::ReadBinary(T& Res)
{
m_Fstream.read(&Res, sizeof(Res));
}
无需分配任何向量,也无需重新解释任何类型的转换。
这仅用于std::fstream
。 请勿将std::wfstream
用于二进制输入,仅使用std::fstream
。 sizeof(T)
可能是奇数,但sizeof(wchar_t)
可能是偶数,因此您无法使用wfstream
读取所需的确切字节wfstream
。 如果您绝对必须使用std::wfstream
并且您绝对确定sizeof(T)
除以sizeof(wchar_t)
,则可以尝试类似
m_Fstream.read(&Res, sizeof(Res)/sizeof(decltype(m_Fstream)::char_type));
但我个人从未尝试过这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.