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

时间:2012-04-12 13:15:31

标签: c# c sockets

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

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

发送
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会正确理解它。

我对它进行了测试,看起来只有当程序用这两种不同语言编码时才会出现问题。

发生了什么事?

1 个答案:

答案 0 :(得分:1)

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

  • 之类的内容进行打印
  • Encoding.UTF8.GetBytes()会为您提供字符串表示形式 - 这对于将其打印到控制台很有用,但对于处理来说是次优的。

修改

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