发布网友 发布时间:2022-04-26 22:53
共3个回答
热心网友 时间:2022-06-19 12:18
我做了个测试:
string msg = "我是我是我是我是我是";
Byte[] b = Encoding.Unicode.GetBytes(msg);
MemoryStream ms = new MemoryStream(b);
byte[] buffer = new byte[4];
ms.Read(buffer, 0, (Int32)ms.Length);
// buffer = Encoding.Unicode.GetBytes(msg);
string result = Encoding.Unicode.GetString(buffer);
Console.WriteLine(result);
Console.ReadLine();
这个代码就会报错,说数组超过大小。
但是你的那个代码为什么没报错呢?因为数组是引用类型;
虽然你 开始 初始化了 长度为4;
但是你后来又写了 buffer= Encoding.Unicode.GetBytes(msg);
右边这个是一个长度为20的字节数组,由于byte []是引用类型,他的数据是放在称为“堆”的内存区域中,所以指向了一个新的引用,即Encoding.Unicode.GetBytes(msg); 所以即使长度变多了也不会报错。
热心网友 时间:2022-06-19 12:18
1 byte = 1字节 = 8bit
一个unicode 表示的汉字 = 2字节 = 16bit
byte[] buffer = new byte[4]; 的意思是 新建了一个,byte类型的数组,长度为4,也就是说 这个数组中有 四个 byte,整个数组的大小 =4 * 1字节=4个字节
string msg = "我是我是我是我是我是"; 占 20个字节
逻辑上看,是装不进去的,数组会越界
热心网友 时间:2022-06-19 12:19
数组长度是16好不,byte的长度才是