将short转换为int

时间:2015-08-22 22:17:58

标签: c#

我需要将数据包标头中的短路转换为整数,不影响其值的方式是什么?还有什么我可以做的吗?

private async void ParsePackets(StreamSocket socket)
{
    using (IInputStream input = socket.InputStream)
    {
        byte[] data = new byte[BufferSize];
        IBuffer buffer = data.AsBuffer();
        uint dataRead = BufferSize;

        // Wait for payload size
        while (data.Length < 4)
        {
            await input.ReadAsync(buffer, BufferSize, InputStreamOptions.Partial);
            dataRead = buffer.Length;

            short payloadSizeShort = 0;
            // Cannot convert from short to system array
            System.Buffer.BlockCopy(data, 2, payloadSizeShort, 0, 2);

            int payloadSize = (int)payloadSizeShort;

            // Wait for full message
            while (data.Length < (PacketHeaderSize + payloadSize))
            {
                // Block copy
                // Delete message bytes from buffer
                // Break
            }
        }


    }
}

4 个答案:

答案 0 :(得分:3)

为什么不

int myInt = (int)BitConverter.ToInt16(data, 2);

答案 1 :(得分:2)

只需执行(int)shortValue,您就不会丢失任何信息,因为您将16位值转换为32位。

编辑:另外,如果你有两条短裤,并且你想用它做一个int,那就这样做:

short s0, s1;
int value = s0 << 16 | s1;

答案 2 :(得分:1)

你的问题是你正在尝试将short []转换为int。您可以通过执行(int)myShort将单个short转换为int,但是不能使用数组执行此操作。您必须单独转换每个索引。

short[] myShorts = new short[2];
int[] myInts = new int[myShorts.Length];

for (int i = 0; i < myShorts.Length; i++) {
    myInts[i] = (int)myShorts[i];
}

答案 3 :(得分:1)

要从数据中的这两个字节中获得短路,您可以使用BitConverter.GetInt16方法。

short转换为int是一种扩大转换,您甚至不必指定它,只需将short值放在int中变量和它被隐式转换:

int payloadSize = BitConverter.GetInt16(data, 2);