using System; using System.Collections.Generic; //using System.Linq; using System.Text; using System.Diagnostics; using System.IO; using static System.Console; using System.Linq; using System.Runtime.InteropServices; using System.Threading; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Security.Permissions; using System.Net.Sockets; using System.Net; namespace ConsoleApplication1 { class Program { [DllImport("dltest.dll", EntryPoint ="Print")] static extern void xPrint(int x); #region old-test ////////////////////////////////////////////////////////////////// static void TestStreamReadWrite() {//一个流不能兼备读写两种操作,不知道为什么,这不合理 string s1 = "你好啊ABC"; var t = "你好啊ABC".Length; //关于编码注意几点: //1,sizeof(char) 等于 2 //2,str.Length 是以元素个数算的,不是按字节算的,如 "你好啊ABC” length = 6 //3,c#在VS的默认编码为 Encoding.Default, 该编码下汉字占两字节,非汉字占1字节,通过查看ms中的字节数据可知 //4,string 类型写入任何buffer时都是先写长度,一般为1字节,再写字节数据,如下 var sz = sizeof(char); //2, 注意char占2字节 var szb = sizeof(bool); //1 var ms = new MemoryStream(); var writer = new BinaryWriter(ms, Encoding.UTF7); writer.Write(s1); ms.Close(); writer.Close(); var ms2 = new MemoryStream(ms.GetBuffer()); var reader = new BinaryReader(ms2, Encoding.UTF8); var s2 = reader.ReadString(); } ////////////////////////////////////////////////////////////////// static void TestEncoding() { string s1 = "你好啊ABC"; //汉字乱码问题,汉字必须使用2个以上字节才能表示 //编码方式 //1,ASCII码,只有一个字节,不能正确表示汉字,出现乱码,可以正确表示数字和字母符号 //2,UNICODE,任何符号都用2个字节表示,因此可以表示汉字和任意符号 //3,UTF8,变字节的编码,可以正确表示任何字符和汉字,各国语言 //4,GB2312编码,国标码,主要是为汉字服务的中国编码,汉字占两字节,字母数字占1字节 //5,default编码,在国内, 般就是GB2312 Encoding.Default.GetBytes(s1); var bytes = Encoding.GetEncoding("GB2312").GetBytes(s1); var len = bytes.Length; var bts = new byte[10 + len]; Array.ConstrainedCopy(bytes, 0, bts, 0, len); var s2 = Encoding.GetEncoding("GB2312").GetString(bts).TrimEnd('