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