国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#中string在內存中是如何表示的

2019-11-14 13:42:52
字體:
來源:轉載
供稿:網友

不知道你是否有過和我一樣的疑問,不同編碼的字符串是如何存儲在運行時的內存中的呢,計算機在操作string類型的對象時,如何知道這個string是什么編碼呢?和文本文件那樣有類似BOM的東東在string對象里?

答案是,內存中是無關編碼的。統一使用UCS2(注意,這里為什么不說是UTF16,見下文)編碼(大小端應該是和計算機CPU有關,intel的應該是小端)存放在內存中。

string對象和IO交互時,分別根據方法中的Encoding去處理來自IO的字節,或者轉換成Encoding所指示的編碼的字節流作為IO輸出。

另外,上文提到內存中使用的是UCS2而不是UTF16,意思是,對于Unicode編碼值大于0xFFFF的編碼,C#和java一樣,是轉換成“代理對”(2*2字節)表示的。所以,如果string中含有類似emoji那樣的“大”字符時,string的Length方法返回的字符串長度是不正確的。解決方案是,使用StringInfo類中的LengthInTextElements。

 PS:System.Text.Encoding中的Unicode和BigEndianUnicode實際是UTF16,微軟一定有它的道理。只是我不清楚。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁德市| 稷山县| 南充市| 长宁县| 神木县| 房产| 江都市| 武邑县| 德昌县| 甘南县| 临海市| 盐源县| 宝清县| 遂昌县| 镇平县| 高要市| 吴忠市| 永平县| 广丰县| 宁都县| 阿勒泰市| 遂昌县| 旺苍县| 怀仁县| 当阳市| 巴青县| 五寨县| 临江市| 广丰县| 浠水县| 江口县| 咸丰县| 毕节市| 赤壁市| 和林格尔县| 通山县| 安顺市| 靖边县| 高雄县| 西乌珠穆沁旗| 青龙|