Byte[]转String及int转换异常求助:转换后字符串含反斜杠
问题分析与解决方案
核心问题
你完全搞错了数据的传输类型:发送端发送的是int类型的二进制字节数组,不是文本字符串的编码字节,但接收端却用Encoding.Unicode.GetString把二进制整数字节当成字符串编码来解析,这必然得到充满控制字符(显示为\0、\u0001这类转义序列)的无效字符串,后续的字符串处理和int转换自然也会失败。
正确的接收端实现
接收端不需要把字节数组转成字符串,直接将收到的二进制字节转回int即可,逻辑要和发送端对应:
public int EcouterReseau(Socket socketClient) { try { byte[] data = new byte[4]; // int固定4字节,无需创建1024长度的数组 int recv = socketClient.Receive(data); // 发送端已将字节转为大端(网络字节序),接收端需匹配本地字节序 if (BitConverter.IsLittleEndian) Array.Reverse(data); return BitConverter.ToInt32(data, 0); } catch { return 0; // 异常时返回默认值0 } }
关键说明
- 发送端逻辑是正确的:将int转为字节数组后反转成大端(网络字节序)发送,这是跨平台二进制数据传输的标准做法。
- 二进制数值字节不能用文本编码类方法解析,接收端必须使用与发送端对应的二进制转换逻辑。
- 利用int固定4字节的特性,直接创建对应长度的数组,避免不必要的内存占用。
内容的提问来源于stack exchange,提问作者Graysander
相关产品推荐
相关产品推荐

