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

标签 c# c sockets

我用 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/

相关文章:

c - C 中的宏生成宏?

c - 检测用于用户态加密的 Linux 内核 AF_ALG 套接字的可用性?

c# - 正则表达式在字符串中查找 2 个数字

c# - Winforms 控件不会显示

c - 信号会被传递给在 POSIX 信号量上被阻塞的程序吗?

c# - 无法使用异步/等待连接到异步服务器

c - recvfrom 函数中的文件描述符错误

c# - EF核心: No backing field could be found for property of entity type and the property does not have a getter

c# - Visual Studio 2010 C# "already defined a member with same parameter types error."

c - 使用 realloc() 会在传递特定内存值后导致段错误