2013-02-14 98 views
0

好吧,这是我的问题。我从文件中读取两个字节。Int16缓冲区帮助(BE)

比方说,这些字节“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

什么想法?

+3

'obuff [length] ='\ 0';'是启动的一个非常糟糕的主意。新数组的最后一个元素是'obuff [length-1]'。如果它不是一个字符串,你也不需要在数组末尾有'\ 0'。 – shinjin 2013-02-14 07:11:23

+0

谢谢,我第一次学习的时候就写了。我会用它! :) – MysteryDev 2013-02-14 07:20:27

回答

3

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

+0

@ user1425433,'0xfd37'不符合有符号的16位整数。 – 2013-02-14 07:11:37

+1

@ user1425433试试吧:) – 2013-02-14 07:13:26

+0

@CarlNorum它的Windows计算器的工作原理。我应该尝试将字节转换为int吗? – MysteryDev 2013-02-14 07:14:38