我有一些代码来自网络阅读高光谱数据(图像,所以很多整数给出像素强度)到一个矢量。我在Linux系统上成功使用了代码,但现在我需要在Windows系统上使用相同的代码。我使用的是Visual Studio 2008。
在Linux中读取数据我得到一个充满整数的向量。在Windows上我得到整数,然后是一些字符或字节数据。我不知道如何更好地描述它。
矢量由
初始化std::vector< unsigned short int > data;
data.resize( samples * lines * bands );
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;
}
machine_endian部分永远不会运行。 temp只是测试我是否可以将数字转换为int。它工作正常。但是,当我将temp放入向量时,插入的信息不仅仅是int,而且它被列为wchar_t。见下图。我想这与类型大小有关,但我对此无能为力。是我的还是Visual Studios的错?有什么想法吗?
答案 0 :(得分:1)
实际上,它运作正常。 Microsoft只是想方便检查wchar_t
值(short int
并在Windows上表示utf16编码字符),因此他们的调试器将short int
显示为wchar_t
s。这只是一个解释问题。
如果您使用char
s作为数据,几乎在任何架构上都会遇到相同的现象。
答案 1 :(得分:0)
typedef struct {
unsigned short x;
unsigned short y;
unsigned short z;
} vec3_t;
并使用vec3_t而不是std :: vector。
在Windows中,wchar_t与unsigned short相同,而在Unix中它的长度为4个字节,因此您应该创建自己的矢量类型以使代码可移植。
答案 2 :(得分:0)
一切正常,只是wchar_t是平台上unsigned short的同义词,因此调试器不知道在那里显示什么名称。此外,没有插入“更多信息”。 MSVC调试器再次将该数字解释为宽字符。