1 using System; 2 using System.Collections.Generic; 3 //using System.Linq; 4 using System.Text; 5 using System.Diagnostics; 6 using System.IO; 7 using static System.Console; 8 using System.Linq; 9 using System.Runtime.InteropServices; 10 using System.Threading; 11 12 namespace ConsoleApplication1 13 { 14 class Program 15 { 16 [DllImport("dltest.dll", EntryPoint ="Print")] 17 static extern void xPrint(int x); 18 #region old-test 19 20 ////////////////////////////////////////////////////////////////// 21 static void TestStreamReadWrite() 22 {//一个流不能兼备读写两种操作,不知道为什么,这不合理 23 string s1 = "你好啊ABC"; 24 25 var t = "你好啊ABC".Length; 26 //关于编码注意几点: 27 //1,sizeof(char) 等于 2 28 //2,str.Length 是以元素个数算的,不是按字节算的,如 "你好啊ABC” length = 6 29 //3,c#在VS的默认编码为 Encoding.Default, 该编码下汉字占两字节,非汉字占1字节,通过查看ms中的字节数据可知 30 //4,string 类型写入任何buffer时都是先写长度,一般为1字节,再写字节数据,如下 31 var sz = sizeof(char); //2, 注意char占2字节 32 var szb = sizeof(bool); //1 33 34 var ms = new MemoryStream(); 35 var writer = new BinaryWriter(ms, Encoding.UTF7); 36 writer.Write(s1); 37 ms.Close(); 38 writer.Close(); 39 40 var ms2 = new MemoryStream(ms.GetBuffer()); 41 var reader = new BinaryReader(ms2, Encoding.UTF8); 42 var s2 = reader.ReadString(); 43 44 } 45 46 ////////////////////////////////////////////////////////////////// 47 static void TestEncoding() 48 { 49 string s1 = "你好啊ABC"; 50 51 //汉字乱码问题,汉字必须使用2个以上字节才能表示 52 //编码方式 53 //1,ASCII码,只有一个字节,不能正确表示汉字,出现乱码,可以正确表示数字和字母符号 54 //2,UNICODE,任何符号都用2个字节表示,因此可以表示汉字和任意符号 55 //3,UTF8,变字节的编码,可以正确表示任何字符和汉字,各国语言 56 //4,GB2312编码,国标码,主要是为汉字服务的中国编码,汉字占两字节,字母数字占1字节 57 //5,default编码,在国内, 般就是GB2312 58 Encoding.Default.GetBytes(s1); 59 var bytes = Encoding.GetEncoding("GB2312").GetBytes(s1); 60 var len = bytes.Length; 61 var bts = new byte[10 + len]; 62 Array.ConstrainedCopy(bytes, 0, bts, 0, len); 63 64 var s2 = Encoding.GetEncoding("GB2312").GetString(bts).TrimEnd('