话说这个东西是够蛋疼的,当时在发《Delphi Read/Write REG_MULTI_SZ》一篇的时候就注意到读到的信息虽然是正确的,但是在写入的时候却发生了错误。如果再读的话那就更不对了。 从网上查了一下那个蛋疼的REG_MULTI_SZ到底是个什么东西,但是大部分人的结论就是这么一句:
REG_MULTI_SZ 一个以空字符结束的字符串数组,被两个null字符结束。
看了半天也没发现到底信息后面写的是什么东西,看来是我太笨了! 今天又遇到这个问题索性把注册表中的一个REG_MULTI_SZ 键值倒了出来,原来竟然是这么一串东东:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System]
"Component Information"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
"Identifier"="AT/AT COMPATIBLE"
"Configuration Data"=hex(9):ff,ff,ff,ff,ff,ff,ff,ff,00,00,00,00,02,00,00,00,05,\
00,00,00,0c,00,00,00,00,00,00,00,00,00,00,00,80,00,ff,03,00,00,3f,00,fe,00,\
01,00,05,00,00,00,18,00,00,00,00,00,00,00,00,00,00,00,00,00,0c,00,00,de,00,\
00,00,00,0e,00,00,00,01,00,00,00,0f,00,00,00,01,00
"SystemBiosDate"="12/17/10"
"SystemBiosVersion"=hex(7):31,00,32,00,31,00,37,00,31,00,30,00,20,00,2d,00,20,\
00,32,00,30,00,31,00,30,00,31,00,32,00,31,00,37,00,00,00,00,00
结束的地方是00,00,00,00,00~ ,知道了是怎么结束的也就知道该怎么写回去了。擦,太蛋疼了~
4 comments
我看了半天,也没看明白是怎么回事………………
就是我比较笨,没看懂两个null是个什么东西。
@obaby
“结束的地方是00,00,00,00,00”,这么解释是不科学的。因为Windows平台上Unicode编码的一个字符是2字节的,所以2个NULL字符就是“00,00,00,00”——共4个字节。而你说的最前面还有1个字节的“00”是属于字符串尾字符的。若尾字符是中文的,那么结束的地方应该是“xx,00,00,00,00”——“xx”表示不确定。
你说的是对的.早先意识到了但是一直没改.惭愧