我有一个游戏数据文件,里面有翻译。不同的字符串用2个字节的十六进制分隔。其中一个似乎是随机的,另一个总是00
这些“分隔符”的示例为1F 00
44 00
15 00
-您可以看到其中一些字符是可打印的。
我试图替换sed sed -i 's/\x..\x00/\x0D\x0A/g' file.data
中的字符,但是用十六进制sed似乎不喜欢通配符。
我还以为我可以将00
替换为0D
,然后删除每行的最后一个字符,但这对几个可打印字符无效。
以下是摘自数据文件的示例部分:
s�Block#�%s has been added to your Blacklist�XP�Get Reputation Points�Add to Friends�%s is already your FriendD�Use Magazines to increase Commander's Leadership.
(Success Rate: %s)�Increase Failed'�Leadership successfully upgraded by %d!�Upgrade Leadership
十六进制:
73 05 00 42 6C 6F 63 6B 23 00 25 73 20 68 61 73 20 62 65 65 6E 20 61 64 64 65 64 20 74 6F 20 79 6F 75 72 20 42 6C 61 63 6B 6C 69 73 74 02 00 58 50 15 00 47 65 74 20 52 65 70 75 74 61 74 69 6F 6E 20 50 6F 69 6E 74 73 0E 00 41 64 64 20 74 6F 20 46 72 69 65 6E 64 73 19 00 25 73 20 69 73 20 61 6C 72 65 61 64 79 20 79 6F 75 72 20 46 72 69 65 6E 64 44 00 55 73 65 20 4D 61 67 61 7A 69 6E 65 73 20 74 6F 20 69 6E 63 72 65 61 73 65 20 43 6F 6D 6D 61 6E 64 65 72 27 73 20 4C 65 61 64 65 72 73 68 69 70 2E 0A 28 53 75 63 63 65 73 73 20 52 61 74 65 3A 20 25 73 29 0F 00 49 6E 63 72 65 61 73 65 20 46 61 69 6C 65 64 27 00 4C 65 61 64 65 72 73 68 69 70 20 73 75 63 63 65 73 73 66 75 6C 6C 79 20 75 70 67 72 61 64 65 64 20 62 79 20 25 64 21 12 00 55 70 67 72 61 64 65 20 4C 65 61 64 65 72 73 68 69 70
也许我太累了,无法提出解决方案,或者我缺少明显的东西。如果有人可以给我一个提示,那就太好了。
谢谢。
编辑: 弄清楚了。可能有点复杂,但适用于我的情况:
xxd -p file.data | tr -d '\n' > file.hex ---> Convert binary to hex, strip new lines
sed -i 's/.\{2\}/& /g' file.hex ---> add spaces every 2 bits so we don't compare the second half of bit 1 with the first half of bit 2
sed -i 's/.. 0a/0d 0a/g' file.hex ---> replace .. 0a with CR/LF
sed -i 's/.. 00/0d 0a/g' file.hex ---> replace .. 00 with CR/LF
xxd -p -r file.hex file2.data ---> convert the hex back to binary. luckily xxd doesn't care about the missing new lines or added spaces.
答案 0 :(得分:0)
sed -i 's/�/ /g' file.data
sed -i 's/.. 00/0D 0A/g' file.hex
WOMM,但请告诉我您的结果。
答案 1 :(得分:0)
弄清楚了。可能有点复杂,但适用于我的情况:
xxd -p file.data | tr -d '\n' > file.hex ---> Convert binary to hex, strip new lines
sed -i 's/.\{2\}/& /g' file.hex ---> add spaces every 2 bits so we don't compare the second half of bit 1 with the first half of bit 2
sed -i 's/.. 0a/0d 0a/g' file.hex ---> replace .. 0a with CR/LF
sed -i 's/.. 00/0d 0a/g' file.hex ---> replace .. 00 with CR/LF
xxd -p -r file.hex file2.data ---> convert the hex back to binary. luckily xxd doesn't care about the missing new lines or added spaces.