【发布时间】:2011-12-11 18:32:14
【问题描述】:
我有一些来自网络的代码,将高光谱数据(图像,所以很多整数给出像素强度)读入向量。我在 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 的错?有什么想法吗?
【问题讨论】:
-
wchar_t被定义为unsigned short(如果它没有直接定义,它是两个字节并且行为相同)所以它只是类型名显示问题。数字是否正确(无论类型如何)? -
感谢您的回复!好的,这有点清楚了。不幸的是,我现在无法确定这些数字,但我没有理由相信它们是不正确的(合理的值)。如果它非常重要,我可以尝试获取这些值,但这有点工作。但是如何将它们很好地保存在 temp 变量中,然后在使用相同数据类型初始化向量时在向量中获取额外数据?
-
对不起,英语不是我的母语,我不懂“但是如何将它们很好地保存在临时变量中,然后在向量中使用相同的数据类型初始化时获取额外的数据?”你能改写一下这个问题吗?
-
请参阅我对以下答案的评论。英语也不是我的第一语言,所以这可能是它不清楚的原因;)但我想知道 813 L 中的 L 之后的字符“部分,我认为实际数据就是全部,而不是它首先显示int 然后是字符。
-
@Seth:
wchar_t既不是unsigned short也不是两个字节。实际上,几乎没有这样的具体要求(3.9.1/5);它只需要能够支持所有可用语言环境中最大的扩展字符集。