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