C#将文本文件中的REG_MULTI_SZ值转换为String

时间:2019-03-08 15:06:03

标签: c# registry

我不是训练有素的程序员,但是我确实写了一些代码(所以要谦虚)。我正在研究读取注册表文件并将值存储在SQL数据库中的代码。我们有不同的注册表文件,具体取决于计算机的构建。虽然我可以保留一个注册表文件文件夹,但是拥有数据库可以使比较差异和跟踪注册表设置的更改变得更加容易。

也就是说,我可以轻松读取字符串和dword值,但是REG_MULTI_SZ值有麻烦。例如,如何在注册表文件中转换它?

“ SampleMS” = hex(7):54,00,45,00,53,00,54,00,00,00,44,00,41,00,54,00,41,00 ,00,00,\   00,00 (这是注册表文件中的两行文本,所以我知道我必须这样做。)

为regedit中显示的实际值: 测试 数据

我已经阅读了十六进制到字节数组和字节数组到字符串的几个示例,但是似乎要做的就是为我提供字符串格式的十六进制值,例如“ 5400450053 ...”

如果某个地方已经回答了这个问题,但我错过了,我深表歉意。任何示例或代码片段均应赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

好吧,这些字节似乎是字符的UTF16表示形式。 MULTI_SZ包含多个以空字符串结尾的空终止字符串(或者,如果您喜欢两个空终止字符,但从技术上讲,它们中的第一个“属于”前一个字符串)。您已向我们展示了两个字符串,每个字符串包含4个字符(加上空字符和结尾)

因此,需要采取的步骤-采取每对十六进制字符并将其转换为字节(围绕此的大量示例)。然后使用此字节数组,并使用System.Text.Encoding.Unicode将这些 bytes 转换为字符串。如今,大多数系统都可以使用包含空字符的字符串,并且在此处标记分隔符,因此,如果要将其拆分为单个字符串,请在之后将其拆分为空字符串转换。

但是,如果您只想存储这些字符串,并且您正在使用的任何DB都可以在字符串中使用空字符,则可以不加更改地传递它们。注意:如果在访问数据库之前直到现在还没有使用过参数化查询,那么现在该学习了。因为构造包含空字符的字符串 literal 通常很棘手,而无需进行大量的手动重新处理和/或转义操作。这通常是个好习惯。


您的字符串应包含字符TEST,空,DA,{{ 1}},T,空,空