为什么 Encoding.Unicode.GetBytes() returns 多一个 0

Why Encoding.Unicode.GetBytes() returns an additional 0

我正在使用 Encoding.Unicode.GetBytes() 将字符串转换为字节,但它总是添加一个额外的 zero。我的代码是

Dim StringBytes As Byte() = Encoding.Unicode.GetBytes("s")

给出的结果为

115
0

另一个例子:

Dim StringBytes As Byte() = Encoding.Unicode.GetBytes("mm")

给出的结果为

109
0
109
0

为什么总是添加这个零?

.Net 使用 Unicode UTF16 (in little-endian byte order) for the value returned from Encoding.Unicode.GetBytes() type, and UTF16 每个常规字符使用 2 个字节。 (UTF16 也用于 string 类型。)

所以对于 2 m,你得到 4 个字节,每个 m 一个 109 和 0。

您看到的 0 不是空终止符。它是字符代码的一部分。

(注意,对于ASCII字符,UTF16表示高字节设置为0,低字节设置为字符的ASCII码。m的ASCII码为109。)