C ++转换字节

时间:2013-11-22 19:28:50

标签: c++ bytearray

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

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 = �

我怀疑这与尺码有关,但我不确定。

代码出了什么问题?

2 个答案:

答案 0 :(得分:5)

您使用sizeof()的方式不正确。它返回指针的大小,而不是指向的东西的大小。当你指向一个项目数组时,没有办法只使用它的指针来访问指向的东西的大小。

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

答案 1 :(得分: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;
}