C#端和C++端套接字通信中的几个问题

本文介绍了C#与C++进行套接字通信时遇到的字符串转换、结束符处理、编码转换等问题。包括从字符串到字符数组的转换,避免空格填充,字符串去'',两端的结束符处理,以及不同平台的编码转换。在处理中文时,需要考虑utf-16与utf-8之间的转换,并确定发送的字符数量。
摘要由CSDN通过智能技术生成

(1) 从字符串转为固定大小的字符数组

如:定义固定大小的结构体:

(使用命名空间:using System.Runtime.InteropServices;)

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    struct OnlineUsrInfo
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst=16)]
        public char[] name;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public char[] IP;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public char[] port;
    }
将string转为char[]时,需要用string对象的PadRight()方法来填充一定大小的字符数组

OnlineUsrInfo.name=str.PadRight(16);

这个方法有一个弊端,就是在name中,内存部分内容为空格,如果传递给C++程序使用,会因为没有字符串终结符“\0”而一直把结构体中的字符读完,从而导致出错

故,一般用PadRight()方法的重载函数 PadRight(16, '\0'); 来实现

注意:最好用PadRight(int nWidth, '\0'); 来填充,否则会默认以空格(space=32)来填充;

(2)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值