【发布时间】:2019-03-19 01:41:01
【问题描述】:
好的,我正在从请求中接收字节..
我打电话来读取字节
byte[] buffer = new byte[1024];
int resp = socket.Receive(buffer);
如果我用这个,
Console.WriteLine(resp)
它返回一个整数 9,表示接收到 9 个字节
当我使用时
int byte1 = buffer[0];
Console.WriteLine(byte1);
返回
0
那么当我使用时
long bytelong = BitConverter.ToInt64(buffer, 0);
Console.WriteLine(bytelong);
我希望
0( + other 7 bytes from the array )
但我收到的是
-1249284928492
这是错误的,因为我知道第一个字节是
0
真的很困惑……
【问题讨论】:
-
你能添加你收到的前 8 个字节吗
-
您可能希望使用
BitConverter.ToUInt64并将值显示为十六进制以更清晰:Console.WriteLine ("{0:X}", bytelong); -
-1249284928492作为 8 字节十六进制数是FFFFFEDD20D0CC14。换句话说,LSB 是 0x14,因此您的byte[]不可能在第一个元素处包含0。因此,您在帖子中提供的信息完全不正确。您的数组以值 0 开头,或者将其传递给ToInt64()返回-1249284928492。两种说法不能同时为真。您至少需要提供一个逻辑上一致的问题,并且实际上您应该提供一个良好的minimal reproducible example 以可靠地重现问题。 -
那么 @PeterDuniho 为什么 int byte1 = buffer[0];返回 0...?
-
"为什么 int byte1 = buffer[0]; 返回 0" -- 如果你在调用
ToInt64()时确实得到了数字-1249284928492,那么它确实不返回 0。我不知道你为什么认为它会,但正如我已经说过的:这两个陈述根本不可能都是真的。要么数组中的第一个字节为 0,要么调用ToInt64()时返回的数字为-1249284928492。由于您没有提供演示您声称的行为的代码示例,因此无法确定您的观察出错的地方。但我向你保证,它有。
标签: c# arrays sockets bitconverter