Linux 无法读取由 BitConverter.GetBytes() 编码的整数

本文关键字:编码 整数 GetBytes BitConverter 读取 Linux | 更新日期: 2023-09-27 18:31:05

我用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 可以正确理解它。

我对其进行了测试,看起来问题仅在程序用这两种不同的语言编码时才存在。

这是怎么回事?

Linux 无法读取由 BitConverter.GetBytes() 编码的整数

  • BitConverter.GetBytes()会给你一个二进制表示 - 在大多数情况下不是可打印的字符(试试int 0x20202020,这应该给你一个或多个空格),但非常适合处理目的。你可以用类似的东西打印它printf("%d",the_int_variable)

  • Encoding.UTF8.GetBytes() 将为您提供字符串表示形式 - 这很好将其打印到控制台,但对于处理来说不是最佳的。

编辑

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