【问题标题】:C# Byte[] Byte array to Unicode stringC# Byte[] 字节数组到 Unicode 字符串
【发布时间】:2022-01-13 13:50:27
【问题描述】:

我需要非常快速的从字节数组到字符串的转换。 字节数组是 Unicode 字符串。


【问题讨论】:

  • "fastest" 将是就地的,但在.net 下这是不可能的(或者我认为)......所以第二好的是“没有转换,一个简单的复制数组到数组(其中第二个数组是字符串的“内部”字符数组)”。

标签: c# .net string memory bytearray


【解决方案1】:

byte[]数组到string

 var mystring = Encoding.Unicode.GetString(myarray);

stringbyte[]

 var myarray2 = Encoding.Unicode.GetBytes(mystring);

【讨论】:

  • @xanatos 为什么要使用var 类型?
  • @Alex 这是 C#,不是 Javascript。 var 不是类型。它是“右手表达式的类型”的缩写(所以string)(例如参见stackoverflow.com/questions/41479/use-of-var-keyword-in-c-sharp
  • @xanatos 抱歉,不知道。谢谢。
  • @xanatos,@alex 技术上 var 在 JavaScript 中并不是你所说的类型。 JavaScript 中的var 是一个关键字,意思是我想在这里声明一个变量 后面会推断出哪个类型。
  • @SNag,避免使用 ASCII,这只是最后的手段,当你完全知道你在做什么以及为什么时。 1)默认情况下,首先要使用的必须是 UTF8 编码 2)如果由于某种原因您正在处理旧的非 unicode 数据,您可以尝试 Encoding.Default 3)仅作为后备,如果您明确坚持使用 0- 127 字节值范围和仅拉丁字符您可以尝试 ASCII(适合 8 位的 7 位) 在作者的情况下,很明显数据是 UTF16 编码的,这就是 Encoding.Unicode 在这里正确的原因。这主要由内存 blob 使用。
【解决方案2】:

试试这个

System.Text.UnicodeEncoding.Unicode.GetString

【讨论】:

  • 如果我使用它,那么它会在结果中返回钻石。这在哪里起作用:Convert.ToBase64String - 为什么会这样?
【解决方案3】:

UTF8(我认为您的意思是“UTF8”而不是“Unicode”)。因为,你只会得到中国符号。 ;)

也许它有助于改变......

var mystring = Encoding.Unicode.GetString(myarray);

...到...

var mystring = Encoding.UTF8.GetString(myarray);

:)

【讨论】:

  • 不,他的数据显然是 UTF16 (Encoding.Unicode) 编码的。A\0n\0o\0n\0i\0... UTF8 和 Unicode (UTF16) 都可以完美兼容中文和任何其他通用编码字符集 (UCS) 中的符号。在大多数情况下,UTF8 确实是默认值,用于数据序列化、持久化和传输。 UTF16 主要用于内存数据的操作系统和框架,以降低编码成本。
猜你喜欢
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
相关资源
最近更新 更多