我做了一个应该工作的转换器,并且在某些情况下有效,但在这种情况下它不起作用。
问题是当cout
生成unsigned char
时,一次都是255,另一次是0.这段代码有什么问题?
这是我的代码。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void longToBytes(long num, unsigned char arr[4])
{
arr[0]= (int)((num >> 24) & 0xFF);
arr[1]= (int)((num >> 16) & 0xFF);
arr[2]= (int)((num >> 8) & 0xFF);
arr[3]= (int)( num & 0xFF);
}
long bytesToLong(unsigned char arr[4])
{
return ((arr[0] << 24) + (arr[1] << 16) + (arr[2] << 8) + arr[3]);
}
void writelongs(long mas[], int howMany)
{
for(int i=0; i<howMany; i++)
{
unsigned char bytes[4];
cout<<mas[i]<<endl;
longToBytes(mas[i], bytes);
for(int j=0; j<4; j++)
{
cout<<(int)bytes[i]; //Problem here.
}
cout<<endl;
}
}
int main()
{
long aray[2]={-118, 1034};
writelongs(aray,2);
return 0;
}
答案 0 :(得分:3)
for(int j=0; j<4; j++)
{
cout<<(int)bytes[i]; // Problem here.
}
您使用索引i而不是j。
for (int j = 0 ; j < 4 ; j++)
{
cout << (int)bytes[j]; // Problem solved.
}