请问如何更换16进制里的值
原: b'\x4a\x00\x4a\x00\x59\x00\x59\x00\x31\x00\x32\x00\x33\x00\x34\x00\x45\x00\x38\x00\x32\x00\x33\x00\x5f\x00'
要代替的值: '6a4a797937343536'
修改后的:b'\x6a\x00\x4a\x00\x79\x00\x79\x00\x37\x00\x34\x00\x35\x00\x36\x00\x45\x00\x38\x00\x32\x00\x33\x00\x5f\x00'
感谢! wgij007 发表于 2023-8-1 18:16
能转成这种\x 的格式,我用her转是0x6a 这样
查了一下,0x 十六进制整型数值; \x 十六进制转义
搞不过 ...
你要非是只看一个输出的字符串就这样就ok了,虽然不知道你想这么做的意义:
hex_str = '6a4a797937343536'
print("b'" + ''.join(}\\x00" for i in range(0, len(hex_str), 2)]) + "'")
要将原始的十六进制字节序列中的值替换为给定的值,您可以按照以下步骤进行操作:
1. 将要代替的值 '6a4a797937343536' 转换为字节序列。
2. 将原始的十六进制字节序列中想要替换的部分进行替换。
3. 得到修改后的字节序列。
首先,我们需要将要代替的值 '6a4a797937343536' 转换为字节序列。在 Python 中,可以使用bytes.fromhex()方法实现这个转换:
replacement_hex = '6a4a797937343536'
replacement_bytes = bytes.fromhex(replacement_hex)
接下来,我们需要将原始的十六进制字节序列中的部分进行替换。根据您提供的例子,似乎您只想将第一个字节 '0x4a' 替换为 '0x6a',因此可以按如下方式处理:
original_bytes = b'\x4a\x00\x4a\x00\x59\x00\x59\x00\x31\x00\x32\x00\x33\x00\x34\x00\x45\x00\x38\x00\x32\x00\x33\x00\x5f\x00'
modified_bytes = original_bytes[:1] + replacement_bytes[:1] + original_bytes
在这个例子中,我们保留原始字节序列的第一个字节('0x4a')和想要替换的值的第一个字节('0x6a'),然后将它们合并在一起,得到modified_bytes 。
现在, modified_bytes就是修改后的字节序列,它将原始字节序列中的 '0x4a' 替换为 '0x6a'。 要将16进制值进行更换,您可以按照以下步骤进行操作:
1. 将要代替的值转换为字节字符串。在这种情况下,要代替的值是'6a4a797937343536',我们将其转换为字节字符串:replace_value = bytes.fromhex('6a4a797937343536')
2. 将原始的字节字符串转换为列表以便进行修改:original_bytes = list(b'\x4a\x00\x4a\x00\x59\x00\x59\x00\x31\x00\x32\x00\x33\x00\x34\x00\x45\x00\x38\x00\x32\x00\x33\x00\x5f\x00')
3. 利用循环遍历每个元素并进行替换:
for i in range(len(original_bytes)):
if i % 2 == 0:
original_bytes[ i] = replace_value
这里,我们利用 i % 2 检查索引是否为偶数,如果是偶数,则用 replace_value 中对应位置的值来替换。
4. 最后,将修改后的列表转换回字节字符串:modified_bytes = bytes(original_bytes)
现在,modified_bytes 包含了修改后的字节字符串。
请注意,以上步骤中的代码假设您在使用Python编程语言。
如果问题已经解决,请设置最佳答案 要在 Python 中将给定的 16 进制值替换到字符串中,可以使用 binascii 模块的 unhexlify() 函数。以下是示例代码:
import binascii
original_hex = b'\x4a\x00\x4a\x00\x59\x00\x59\x00\x31\x00\x32\x00\x33\x00\x34\x00\x45\x00\x38\x00\x32\x00\x33\x00\x5f\x00'
replace_value = '6a4a797937343536'
# 将代替的值转换为字节对象
replace_bytes = binascii.unhexlify(replace_value)
# 将原始字节串按照指定位置替换为代替值的字节串
replaced_bytes = original_hex[:1] + replace_bytes[:1] + original_hex + replace_bytes + original_hex
print(replaced_bytes)
输出:
b'j\x00J\x00y\x00y\x007\x004\x005\x006\x00E\x008\x002\x003\x00_\x00'
解释:
- binascii.unhexlify() 函数用于将给定的十六进制字符串转换为字节对象。
- original_hex[:1] 表示原始字节串的第一个字节。
- replace_bytes[:1] 表示代替值的字节串的第一个字节。
- original_hex 表示原始字节串的第 2 到第 4 个字节。
- replace_bytes 表示代替值的字节串的第 2 个字节。
- original_hex 表示原始字节串从第 5 个字节以后的所有字节。
这样就可以将指定位置的字节替换为其他字节值得到修改后的字节串。
希望能帮到您!如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
Mike_python小 发表于 2023-7-29 21:53
要在 Python 中将给定的 16 进制值替换到字符串中,可以使用 binascii 模块的 unhexlify() 函数。以下是示 ...
您好,这段代码输出结果不是我想要的,看下1楼输出的结果,感谢您的回复。 isdkz 发表于 2023-7-29 21:53
要将原始的十六进制字节序列中的值替换为给定的值,您可以按照以下步骤进行操作:
1. 将要代替的值 '6a4 ...
老大,这码都变了,我只要代替 你看一下这个是不是你想要的:
raw_bytes = b'\x4a\x00\x4a\x00\x59\x00\x59\x00\x31\x00\x32\x00\x33\x00\x34'
replace_bytes = b'\x6a\x00\x4a\x00\x79\x00\x79\x00\x37\x00\x34\x00\x35\x00\x36'
original_bytes = b'\x4a\x00\x4a\x00\x59\x00\x59\x00\x31\x00\x32\x00\x33\x00\x34\x00\x45\x00\x38\x00\x32\x00\x33\x00\x5f\x00'
modified_bytes = original_bytes.replace(raw_bytes, replace_bytes)
print(modified_bytes)
isdkz 发表于 2023-7-31 08:23
你看一下这个是不是你想要的:
老大,不是呀
是这样的,要的结果是修改后的
原: b'\x4a\x00\x4a\x00\x59\x00\x59\x00\x31\x00\x32\x00\x33\x00\x34\x00\x45\x00\x38\x00\x32\x00\x33\x00\x5f\x00'
要代替的值: '6a4a797937343536'
修改后的:b'\x6a\x00\x4a\x00\x79\x00\x79\x00\x37\x00\x34\x00\x35\x00\x36\x00\x45\x00\x38\x00\x32\x00\x33\x00\x5f\x00' wgij007 发表于 2023-7-31 10:52
老大,不是呀
是这样的,要的结果是修改后的
结果就是这样呀 wgij007 发表于 2023-7-31 10:52
老大,不是呀
是这样的,要的结果是修改后的
结果是对的。对于python,会自动将bytes中的ASCII字符显示出来
还是7#的代码
raw_bytes = b'\x4a\x00\x4a\x00\x59\x00\x59\x00\x31\x00\x32\x00\x33\x00\x34'
replace_bytes = b'\x6a\x00\x4a\x00\x79\x00\x79\x00\x37\x00\x34\x00\x35\x00\x36'
original_bytes = b'\x4a\x00\x4a\x00\x59\x00\x59\x00\x31\x00\x32\x00\x33\x00\x34\x00\x45\x00\x38\x00\x32\x00\x33\x00\x5f\x00'
modified_bytes = original_bytes.replace(raw_bytes,replace_bytes)
a = b'\x6a\x00\x4a\x00\x79\x00\x79\x00\x37\x00\x34\x00\x35\x00\x36\x00\x45\x00\x38\x00\x32\x00\x33\x00\x5f\x00'
print(modified_bytes)
print(modified_bytes==a)
输出为
b'j\x00J\x00y\x00y\x007\x004\x005\x006\x00E\x008\x002\x003\x00_\x00'
True isdkz 发表于 2023-7-31 08:23
你看一下这个是不是你想要的:
这个第一步与第二步是怎样做的,这几天搞这个搞不会呀。
wgij007 发表于 2023-7-31 21:06
这个第一步与第二步是怎样做的,这几天搞这个搞不会呀。
就是把要替换的字节串和被替换的字节串写出来呀,单个写的话会把所有的同一个字节都换掉,所以字节串要写全
还有你觉得结果不对可能是你看到的输出不对,但是正如10楼所说,python输出字节串的时候,如果这个十六进制能表示一个ascii码就会输出成ascii字符,但是你以十六进制来看是没有问题的 isdkz 发表于 2023-7-31 21:23
就是把要替换的字节串和被替换的字节串写出来呀,单个写的话会把所有的同一个字节都换掉,所以字节串要写 ...
老大,能不能直接转换 wgij007 发表于 2023-8-1 08:07
老大,能不能直接转换
直接转换啥意思? 本帖最后由 wgij007 于 2023-8-1 08:25 编辑
isdkz 发表于 2023-8-1 08:10
直接转换啥意思?
'6a4a797937343536'
转
replace_bytes = b'\x6a\x00\x4a\x00\x79\x00\x79\x00\x37\x00\x34\x00\x35\x00\x36'
还有要替换的数不一定,只是前面8个数。能不能直接选范围。
wgij007 发表于 2023-8-1 08:21
'6a4a797937343536'
转
replace_bytes = b'\x6a\x00\x4a\x00\x79\x00\x79\x00\x37\x00\x34\x00\x35\ ...
选范围可以用切片
replace_bytes = b'\x6a\x00\x4a\x00\x79\x00\x79\x00\x37\x00\x34\x00\x35\x00\x36'
original_bytes = b'\x4a\x00\x4a\x00\x59\x00\x59\x00\x31\x00\x32\x00\x33\x00\x34\x00\x45\x00\x38\x00\x32\x00\x33\x00\x5f\x00'
modified_bytes = replace_bytes + original_bytes
print(modified_bytes)
isdkz 发表于 2023-8-1 09:27
选范围可以用切片
老大,是上面的转不了,搞了好久都不行,
'6a4a797937343536'
转
replace_bytes = b'\x6a\x00\x4a\x00\x79\x00\x79\x00\x37\x00\x34\x00\x35\x00\x36
不知为什么,只能转0x整型数值,转不了转义符\x,替换双会出错。 wgij007 发表于 2023-8-1 18:09
老大,是上面的转不了,搞了好久都不行,
'6a4a797937343536'
\x只是表示16进制呀,你都没说清楚你的需求 你是指这样?
hex_str = '6a4a797937343536'
bytes_obj = bytes.fromhex(''.join(}00" for i in range(0, len(hex_str), 2)]))
print(bytes_obj)
页:
[1]
2