繁体   English   中英

向量 <char> 诠释与矢量 <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_Fstreamstd::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_tuint16_tuint32_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM