我需要将数据包标头中的短路转换为整数,不影响其值的方式是什么?还有什么我可以做的吗?
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
}
}
}
}
答案 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);