如何解决在Python中将字符串转换为带有“0x”和前导0的十六进制
我想通过 Python 更改注册表项值。值类型将为 REG_DWORD
,表示十六进制,包括整数格式的 0x000
。我无法将带有数字的字符串转换为其十六进制格式的整数。
for i in range(len(checking_names)): #loop through names to check
if checking_names(i) !== should_values(i): #no match
with winreg.CreateKeyEx(key,subkey_path,winreg.KEY_ALL_ACCESS) as subkey:
winreg.DeleteValue(subkey,names_data[i]) #have to delete name in order to overwrite
winreg.SetValueEx(subkey,names_data[i],winreg.REG_DWORD,new_hex_value) #overwrite name value with correct value from predefined list
我的 values_data
列表由作为字符串的预定义变量组成。其中一个条目是字符串 '9600'
。在我上面的代码中,values_data[i]
应该是十六进制格式的 9600:0x00002580
。对于此转换,我执行以下操作:
dec_to_hex_str = format(int(values_data[i]),'x') #string decimal to string hexadecimal conversion
zeros_pre_x = '0x' #0x for format 0xffffffff
zeros_to_add = 8 - len(dec_to_hex_str) #count number of leading 0s to add
mid_zeros_list = []
for j in range(zeros_to_add):
mid_zeros_list.append(0) #add a leading 0
mid_zeros = ''.join(mid_zeros_list) #convert list to string
new_hex_value = int(zeros_pre_hex + mid_zeros + dec_to_hex_str)
当我运行此代码时,我的 Python shell 没有响应,并且 subkey
值的 Windows 注册表中没有任何更改。问题似乎是,winreg.SetValueEx .... winreg.REG_DWORD
只理解整数格式,但我的 new_hex_value
没有正确地从字符串转换为整数。
任何帮助将不胜感激!
解决方法
你的问题出在线路上
new_hex_value = int(zeros_pre_hex + mid_zeros + dec_to_hex_str)
您正在将数字转换为十六进制字符串,然后将其转换为整数。这不仅是 int()
的无效参数,而且即使它是正确的,您也只是将其转换回整数(Python 中没有十六进制整数这样的东西)。所以你的行应该是:
new_hex_value = zeros_pre_hex + mid_zeros + dec_to_hex_str
然后简单地把它写成一个 REG_SZ
因为你想要一个十六进制字符串,而不是一个整数。注册表中也没有“十六进制整数”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。