长字节数组转换器在C ++中不起作用

时间:2015-03-06 14:48:01

标签: c++ arrays byte long-integer

我做了一个应该工作的转换器,并且在某些情况下有效,但在这种情况下它不起作用。

问题是当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;
}

1 个答案:

答案 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.
}