我需要转换一个字符串,将其写入registry.reg_binary键。
我有写入密钥的基本代码,如下所示:
try
rootkey := HKEY_CURRENT_USER;
if OpenKey(Key, False) then
begin
reg.WriteBinaryData('SomeKey', SomeValue, Length(SomeVale));
CloseKey;
end;
finally
reg.Free;
end;
在上文中, SomeValue 需要是TEdit文本字段的十六进制值;
我目前的方法是使用IntToHex在每个字符的Ord值上转换TEdit.text。这给了我一个看起来像我想写的字符串...
此时我很难过......
答案 0 :(得分:6)
如果你想写一个字符串,那么你应该调用WriteString
。
reg.WriteString('SomeKey', SomeValue);
如果您有整数,请拨打WriteInteger
。
IntValue := StrToInt(SomeValue);
reg.WriteInteger('SomeKey', IntValue);
如果你有真正的二进制数据,那么它应该是什么样子 - 十六进制或其他什么。致电WriteBinaryData
并完成它。数据的实际外观并不重要,因为您不必以该格式读取数据。稍后您将使用ReadBinaryData
阅读它,它将使用您编写它们时所具有的格式填充缓冲区。
IntValue := StrToInt(SomeValue);
reg.WriteBinaryValue('SomeKey', IntValue, SizeOf(IntValue));
这会将整数的所有四个字节作为二进制值写入注册表。
当Windows注册表编辑器向您显示键的值时,它可能会以十六进制显示每个字节,但这只是显示格式。这并不意味着您必须在将数据添加到注册表之前对其进行格式化。
答案 1 :(得分:2)
当然这假设你的字符串只包含ansi数据, 但如果您尝试将字符串写入注册表值作为二进制值,那么对您的逻辑的以下更改将起作用:
var
EdStr : AnsiString;
:
EdStr := AnsiString(Edit1.Text); // de-unicode
reg.WriteBinaryData('SomeKey', EdStr[1], Length(EdStr));