2011-09-18 41 views
3

我有以下代码:的Javascript无符号短符号短

var v = [0xFF, 0xFF]; 
alert((v[0]<<8) | v[1]); 

它提醒65535(最大短值)。

我怎样才能将这个字节数组当作一个有符号的short来获得这个数组的有符号值。

回答

5

假设较高位是符号:

var sign = v[0] & (1 << 7); 
var i = ((v[0] & 0x7F) << 8) | v[1]; 
if (sign) { 
    i = -i; 
} 

http://jsfiddle.net/p4TQw/1/


如果使用Two's complement表示:

var i = (((v[0] << 8) | v[1]) << 16) >> 16); 

的16位左移位移动的所有位左边;并且在移位时算术16位右移来处理符号。 (JavaScript使用32位整数移位操作。)

http://jsfiddle.net/p4TQw/3/

+0

不应[0xFF时,为0xFF]被签署-1?如果我在C#中执行以下代码: 'Int16 v = -1; byte [] int16LittleEndian = BitConverter.GetBytes(v); Console.WriteLine(BitConverter.ToString(ba));'我得到'FF-FF'作为回报。 与Console.WriteLine一样(BitConverter.ToInt16(new byte [] {0xFF,0xFF},0));'我得到-1; –

+0

是的,这取决于你使用的约定。如果使用二进制补码,则为-1。 – arnaud576875

+0

啊真棒,谢谢你这个词。我会阅读它:) –