繁体   English   中英

python如何将原始字符串转换为十六进制?

[英]How python converts raw string to hex?

我有一些原始字符串要转换为十六进制

>>> word_str = "4954640000005200000005a7a90fb36ecd3fa2ca7ec48ca36004acef63f77157ab2f53e3f768ecd9e18547b8c22e21d01bfb6b3de325a27b8fb3acef63f77157ab2f53e3f768ecd9e185b7330fb7c95782fc3d67e7c3a66728dad8b59848c7670c94b29b54d2379e2e7a"

>>> hex_str = word_str.decode('hex')
>>> hex_str = "ITd\x00\x00\x00R\x00\x00\x00\x05\xa7\xa9\x0f\xb3n\xcd?\xa2\xca~\xc4\x8c\xa3`\x04\xac\xefc\xf7qW\xab/S\xe3\xf7h\xec\xd9\xe1\x85G\xb8\xc2.!\xd0\x1b\xfbk=\xe3%\xa2{\x8f\xb3\xac\xefc\xf7qW\xab/S\xe3\xf7h\xec\xd9\xe1\x85\xb73\x0f\xb7\xc9W\x82\xfc=g\xe7\xc3\xa6g(\xda\xd8\xb5\x98H\xc7g\x0c\x94\xb2\x9bT\xd27\x9e.z"

通过查看ascii表,我想它一次需要两个数字,并通过ascii表中的适当值将它们转换为

49 -> I
54 -> T 
64 -> d
00 -> \x00  
00 -> \x00

但是在某些时候,这个规则被打破了

52 -> \x00R (00 and 52)

然后是一次取两个数的收益,

00 -> \x00 
00 -> \x00 
00 -> \x00
05 -> \x05 
a7 -> \xa7 
a9 -> \xa9 
0f -> \x0f 

在这里,它同时需要2对( b363 )而不是一对,其中它不会将b3转换为具有适当值的值(来自扩展的ascii表)

b36e -> \xb3n

cd在这里变成\\xcd? ...

 cd ->  \xcd?

我的目标是在C ++中实现相同的变量(variable.decode('hex')),但是我需要了解发生了什么,这里使用了哪种算法?

您要问的是字符串的表示形式 ,以人类可读的格式打印它。 字符串本身包含原始十六进制字符串中每个字节的值(每个字节均来自两个原始数字)。

字符串中的某些字节是无法打印或无法用ASCII表示的字符。 对于这些,Python使用转义码: \\x后跟两个原始十六进制数字。

在示例b36e -> \\xb3n ,Python将b3转换为\\xb3 下一个字节6e是小写n ASCII字符,因为它是可打印的,所以它逐字逐字地出现。 Python并不是“一次让他们两个”。 每个字节分别处理。

因此,基本上,如果您想在C ++中“做同样的事情”,那么您希望逐字添加32到126(含)之间的所有字符,并使用\\x转义添加该范围之外的所有字符。

我不确定您是否真的想在C ++中做同样的事情; 也许您可以解释为什么要在C ++中生成Python字符串表示形式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM