gpt4 book ai didi

c# - 在 C# 中将 2 个字节转换为 Short

转载 作者:IT王子 更新时间:2023-10-29 04:21:19 25 4
gpt4 key购买 nike

我正在尝试将两个字节转换为无符号短整数,以便检索实际的服务器端口值。我以此为基础 protocol specification在回复格式下。我尝试使用 BitConverter.ToUint16()为此,但问题是,它似乎没有抛出预期值。请参阅下面的示例实现:

int bytesRead = 0;

while (bytesRead < ms.Length)
{
int first = ms.ReadByte() & 0xFF;
int second = ms.ReadByte() & 0xFF;
int third = ms.ReadByte() & 0xFF;
int fourth = ms.ReadByte() & 0xFF;
int port1 = ms.ReadByte();
int port2 = ms.ReadByte();
int actualPort = BitConverter.ToUInt16(new byte[2] {(byte)port1 , (byte)port2 }, 0);
string ip = String.Format("{0}.{1}.{2}.{3}:{4}-{5} = {6}", first, second, third, fourth, port1, port2, actualPort);
Debug.WriteLine(ip);
bytesRead += 6;
}

给定一个示例数据,假设对于两个字节值,我有 105 和 135,转换后的预期端口值应该是 27015,但我使用 BitConverter 得到的值是 34665。

我是不是做错了?

最佳答案

如果您反转 BitConverter 调用中的值,您应该会得到预期的结果:

int actualPort = BitConverter.ToUInt16(new byte[2] {(byte)port2 , (byte)port1 }, 0);

在小端架构上,低位字节需要在数组中排在第二位。正如 lasseespeholt 在评论中指出的那样,您需要颠倒大端架构的顺序。这可以用 BitConverter.IsLittleEndian 检查属性(property)。或者使用 IPAddress.HostToNetworkOrder 可能是一个更好的整体解决方案(首先转换值,然后调用该方法以正确的顺序放置字节,而不考虑字节序)。

关于c# - 在 C# 中将 2 个字节转换为 Short,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5749801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com