0

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

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

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

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

这是怎么回事?

4

1 回答 1

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

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

编辑

更新问题后,更改printf("%s", prefix);printf("%d", prefix);after 更改前缀以键入 int 并重试。

于 2012-04-12T13:20:23.653 回答