你好StackOverflowers
我在某处读到C#字符串不是以null结尾的。很好!但我想知道该方法是否:
byte[] myBytes = Encoding.ASCII.GetBytes(myString);
在数组末尾添加一个空终止符,或者是否必须手动执行? (将使用此数组的C系统确实需要它)。
如果是手动的,我想方法是:
byte[] myBytes = Encoding.ASCII.GetBytes(myString + '\0');
数据应为ASCII,无需担心编码。
答案 0 :(得分:3)
在数组末尾添加一个空终止符,或者如果我必须手动将其终止
TL; DR -这取决于。对于纯.NET开发,您不需要它。 如果您打算对本地代码使用p调用,那么.NET可以为您很好地进行翻译,因此您也不必这样做。
我在某处读到C#字符串不是以null结尾的
正确。
MSDN:
字符串是String类型的对象,其值为文本。在内部,文本存储为Char对象的顺序只读集合。 C#字符串的末尾没有以null结尾的字符;因此,C#字符串可以包含任意数量的嵌入式空字符('\ 0')。字符串的
// Get access to the native MongoDB client via the default Sails datastore. var db = sails.getDatastore("nameOfTheDatastore").manager; db.collection('user').find().toArray(console.log);
属性表示它包含的Char对象的数量,而不是Unicode字符的数量。 -Tell me more...
OP:
但是我想知道方法
Length
是否有效 在数组的末尾添加一个空终止符,或者如果我必须手动将其添加
不是,您也不需要,除非您当然希望通过 p调用将字符串传递给本地代码,但这是一个完全不同的问题(无论如何,NET都会为您解决)。
答案 1 :(得分:2)
它没有添加,您的第二个代码将起作用。
byte[] myBytes =
Encoding.ASCII.GetBytes("A"); // gives {65}
byte[] myBytes =
Encoding.ASCII.GetBytes("A"+"\0"); // gives {65, 0}
答案 2 :(得分:0)
GetBytes
不会添加空终止符。根据{{3}},您可以仅将char.MinValue
添加到字符串的末尾。
byte[] myBytes = Encoding.ASCII.GetBytes(myString + char.MinValue);
答案 3 :(得分:0)
来自MSDN
您的Unicode应用程序在使用时应始终将零转换为TCHAR 空终止的字符串。
因此,要有一个以空字符结尾的字符串,我们必须在此代码的末尾添加一个字节。 byte
的默认值为0
byte[] bytes= Encoding.Default.GetBytes(myString);
byte[] bytesNull = new byte[bytes.Length + 1];
bytes.CopyTo(bytesNull , 0);