使用Encoding.ANSI或Encoding.Unicode时,获取Null终止字符串
本文关键字:Encoding 获取 Null 字符串 终止 ANSI Unicode 使用 | 更新日期: 2023-09-27 18:21:04
我有一个c#字符串,如下所示:
string a = "Hello";
- 如何使用
Encoding
类来获取字符的确切长度,包括null终止字符?例如,如果我使用Encoding.Unicode.GetByteCount
,我应该得到12;如果我使用了Encoding.ASCII.GetByteCount
,我应该获得6 - 如何使用
Encoding
类将字符串编码为包含null终止字符的字节数组
谢谢你的帮助!
据我所知,null终止对于C/C++语言/平台来说是一件特殊的事情。Unicode和ANSI编码没有指定字符串以null结尾的任何要求,C#/CLR平台也没有。你不能指望他们包括那个额外的角色。因此,您可能很难让这些类从您的5个字符的"Hello"字符串中发出。
但是,在C#/CLR中,字符串可以包含null字符。
因此,在此基础上,尝试转换以下这个6个字符的字符串:
string a = "Hello'0";
或
string a = "Hello";
a += "'0"; // if you really can't have the '0 at first time, you can simply add it
我相信你会通过Encoding.ANSI和Encoding.Unicode(ANSI中的single''0,UTF中的single''0UTF16等)得到你想要的结果
(另外,请注意,如果您是p/Invoking,则不需要手动处理。假设数据类型集被认为是类似字符串的数据,而不是类似数组的数据,Marshaller将正确地终止字符串。)
在.NET中,字符串不是以null结尾的,因此如果使用的协议需要null字符,则需要自己添加null字符。这意味着:
- 您需要手动将字符串长度加1
- 您需要手动在字节数组的末尾写入一个空字符(例如
(byte)0
)