gpt4 book ai didi

c# - Linux 无法读取 BitConverter.GetBytes() 编码的整数

转载 作者:行者123 更新时间:2023-11-30 15:57:58 26 4
gpt4 key购买 nike

我用 C# 做了一个客户端,我想在 Linux 下用 C 语言构建一个服务器。

我为每个“消息”使用一个带有“消息”长度的前缀。我使用 BitConverter.GetBytes() (4 字节数组)将其编码为 byte[] 数组。之后我通过

发送
socket.Send(prefix, prefix.Length, 0);

Linux 上的 C 服务器无法读取该号码。尽管读取了 4 个字节,但它显示了一个奇怪的字符。

Linux 端看起来像

char prefix[4];
int bytes = 0;
bytes = recv(s, prefix, 4, 0);
printf("%s", prefix);

如果我使用 Encoding.UTF8.GetBytes() 对数字进行编码,Linux 可以正确理解它。

我测试了它,看起来问题只出现在程序用这两种不同的语言编码时。

发生什么事了?

最佳答案

  • BitConverter.GetBytes() 将为您提供一个二进制表示形式 - 在大多数情况下不是可打印字符(尝试 int 0x20202020,这应该给您一个或多个空间),但非常适合处理目的。您可以使用类似 printf("%d",the_int_variable)

  • 的方式打印它
  • Encoding.UTF8.GetBytes() 将为您提供 string 表示形式 - 某种东西,这对于将其打印到控制台来说很好,但对于处理而言不是最佳选择.

编辑

更新问题后,将前缀更改为 int 后,将 printf("%s", prefix); 更改为 printf("%d", prefix);然后重试。

关于c# - Linux 无法读取 BitConverter.GetBytes() 编码的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10124355/

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