C++ 矢量元';t存储正确的数据类型(wchar\u t而不是uint16\u t)

C++ 矢量元';t存储正确的数据类型(wchar\u t而不是uint16\u t),c++,wchar-t,C++,Wchar T,我有一些代码从网络读取高光谱数据(图像,很多整数给出像素强度)到一个向量。我在Linux系统上成功地使用了该代码,但现在我需要在windows系统上使用相同的代码。我使用VisualStudio2008 在Linux中读取数据时,我得到一个充满整数的向量。在windows上,我得到整数,然后是一些字符或字节数据。我没有足够的知识来更好地描述它 向量初始化为 std::vector< unsigned short int > data; data.resize( samples * l

我有一些代码从网络读取高光谱数据(图像,很多整数给出像素强度)到一个向量。我在Linux系统上成功地使用了该代码,但现在我需要在windows系统上使用相同的代码。我使用VisualStudio2008

在Linux中读取数据时,我得到一个充满整数的向量。在windows上,我得到整数,然后是一些字符或字节数据。我没有足够的知识来更好地描述它

向量初始化为

std::vector< unsigned short int > data;
data.resize( samples * lines * bands );
std::fill( data.begin(), data.end(), 0 );
std::vector数据;
数据。调整大小(样本*行*带);
std::fill(data.begin(),data.end(),0);
有关守则如下:

for( unsigned int i=0; i < num_pixels && file; ++i ){
     char number[sizeof(DataType)];
     file.read( number , sizeof( DataType ) );
     int l = sizeof(DataType)-1;
    if (machine_endian != header.big_endian) {
        for (int j = 0; j < l; j++, l--){
            number[j] ^=number[l];
            number[l] ^= number[j];
            number[j] ^= number[l];
        }
    }
 unsigned short temp = *((unsigned short int*)number);
     data[i] = temp;
}
for(无符号整数i=0;i
机器的端部永远不会运转。temp只是测试我是否可以将数字转换成int。它工作正常。然而,当我将temp放入向量时,插入的信息不仅仅是int,它被列为wchar\t。见下图。我想这和字体大小有关,但我不知道为什么。是我的错还是视觉工作室的错?有什么想法吗

并使用vec3_t代替std::vector

在Windows中,wchar\u t与unsigned short相同,而在Unix中,它的长度为4字节,因此您应该创建自己的向量类型以使代码可移植

并使用vec3_t代替std::vector


在Windows中,wchar\u t与unsigned short相同,而在Unix中,它的长度为4字节,因此您应该创建自己的向量类型以使代码可移植。

一切正常,只是wchar\u t在您的平台上是unsigned short的同义词,因此调试器不知道在那里显示什么名称。此外,没有插入“更多信息”。MSVC调试器再次将数字解释为宽字符。

一切正常,只是wchar\u t是平台上unsigned short的同义词,因此调试器不知道在那里显示什么名称。此外,没有插入“更多信息”。MSVC调试器再次将数字解释为宽字符。

实际上,它工作正常。Microsoft只是想方便检查
wchar\u t
值(即
short int
s,在windows上表示utf16编码字符),因此他们的调试器将
short int
s显示为
wchar\u t
s。这只是一个解释的问题


如果您对数据使用了
char
s,那么几乎在任何体系结构上都会遇到相同的现象。

实际上,它工作正常。Microsoft只是想方便检查
wchar\u t
值(即
short int
s,在windows上表示utf16编码字符),因此他们的调试器将
short int
s显示为
wchar\u t
s。这只是一个解释的问题


如果您对数据使用了
char
s,那么几乎在任何体系结构上都会遇到相同的现象。

wchar\u t
被定义为
无符号短字符
(如果不是直接定义为无符号短字符,则为两个字节,其行为方式相同),因此这只是类型名显示问题。数字是否正确(无论类型如何)?谢谢您的回复!好的,这就清楚了一点。不幸的是,我现在无法确定这些数字,但我没有理由相信它们是错误的(合理值)。如果这是非常重要的,我可以试着得到这些值,但这需要一点工作。但是,当使用相同的数据类型初始化向量时,如何将它们很好地保存在temp变量中,然后在向量中获得额外的数据呢?对不起,英语不是我的第一语言,我不明白“但是当使用相同的数据类型初始化向量时,如何将它们很好地保存在temp变量中,然后在向量中获得额外的数据呢?”你能重新措辞这个问题吗?请看我对下面答案的评论。英语也不是我的第一语言,所以这可能就是我不清楚的原因;)但我想知道813年L之后的角色“在某种程度上,我认为实际数据就是全部,而不是它首先显示int,然后是字符。@Seth:
wchar\u t
既不是定义为
无符号短的
也不是定义为两个字节。实际上,对它几乎没有这样的具体要求(
3.9.1/5
);它只需要能够支持所有可用区域设置中最大的扩展字符集。
wchar\u t
被定义为
无符号短字符集(如果它不是直接定义为无符号短字符集,则为两个字节,其行为方式相同),因此这只是类型名显示问题。数字是否正确(无论类型如何)?谢谢您的回复!好的,这就清楚了一点。不幸的是,我现在无法确定这些数字,但我没有理由相信它们是错误的(合理值)。如果这是非常重要的,我可以试着得到这些值,但这需要一点工作。但是,当使用相同的数据类型初始化向量时,如何将它们很好地保存在temp变量中,然后在向量中获得额外的数据呢?对不起,英语不是我的第一语言,我不明白“但是当使用相同的数据类型初始化向量时,如何将它们很好地保存在temp变量中,然后在向量中获得额外的数据呢?”你能重新措辞这个问题吗?请看我对下面答案的评论。英语也不是我的第一语言,所以这可能就是我不清楚的原因;)但我想知道813L“部分中L后面的字符,我认为实际数据就是全部,而不是它先显示int,然后显示th
typedef struct {
    unsigned short x;
    unsigned short y;
    unsigned short z;
} vec3_t;