2013-11-22 73 views
1

我有下面的代码,其中包含字节的vector<int>被转换为char[]。然后输出char[]C++转换字节

vector<int> data; 
data.push_back(33); 
data.push_back(69); 
data.push_back(80); 
data.push_back(0); 
data.push_back(0); 
data.push_back(74); 
data.push_back(255); 

char* result = new char[data.size()]; 

for(int i = 0; i < data.size(); i++) { 
    result[i] = (char)data[i]; 
    cout << i << " = " << (char)data[i] << endl; 
} 

cout << "--" << endl; 

for(int i = 0; i < sizeof(result); i++) { 
    cout << i << " = " << result[i] << endl; 
} 

此代码产生以下输出。

0 = ! 
1 = E 
2 = P 
3 = 
4 = 
5 = J 
6 = � 
-- 
0 = ! 
1 = E 
2 = P 
3 = 

不过,我希望它是

0 = ! 
1 = E 
2 = P 
3 = 
4 = 
5 = J 
6 = � 
-- 
0 = ! 
1 = E 
2 = P 
3 = 
4 = 
5 = J 
6 = � 

我怀疑这是与大小,但我不能肯定。

代码出了什么问题?

+1

'sizeof(result)'将为4(或x64中的8),因为这是指针的大小。 –

回答

5

您使用的方式sizeof()不正确。它返回的是指针的大小,而不是指向的东西的大小。当您指向一组项目时,无法访问指向它的指针的大小。

您必须记住您在某处使用new分配的大小并使用它。

+0

谢谢!将接受。 – screenmutt

0
for(int i = 0; i < sizeof(result); i++) // PROBLEM! 
{ 
    cout << i << " = " << result[i] << endl; 
} 

result是一个指针,它似乎你是一个32位的系统上,所以sizeof(result)为4(字节)。所以你的循环从[0,4)迭代。您需要通过尺寸或使用矢量的尺寸:

for(int i = 0; i < data.size(); i++) 
{ 
    cout << i << " = " << result[i] << endl; 
}