来自缓冲帮助(BE)的Int16

时间:2013-02-14 07:00:51

标签: c++ short

好吧,这是我的问题。我从文件中读取了两个字节。

让我们说这些字节是“FD 37” - 那应该是:64823

我正在读大端,所以我尝试了反转小端的阵列,然后尝试位移动。我确实需要帮助,因为我无法得到这个。任何帮助表示赞赏。

(是的,我知道这是一个贫民窟阵列逆转......)

static void Reverse(BYTE* &buffer, long length)
{
    BYTE *obuff = new BYTE[length];
    for(int i=0; i<length; i++)
        obuff[length-i-1] = buffer[i];
    obuff[length] = '\0';
    buffer = obuff;
}

typedef signed short int Int16;

Int16 ReadInt16()
{
    Int16 val;
    BYTE* bytes = new BYTE[2];
    Read(bytes, 0, 2); //just stores 2 bytes into bytes and advances buffer 2 positions.
    Array::Reverse(bytes,2);
    val = bytes[0] | (bytes[1] << 8);
    return val;
}

使用该方法的结果是-753

任何想法?

1 个答案:

答案 0 :(得分:3)

如果你想要一个无符号数字,你应该使用无符号类型而不是签名类型。