我正在尝试为使用MessagePack的库创建合成单元测试。我希望在Python中创建十六进制转义的二进制字符串,以便将其嵌入C++源代码中。我像这样创建一个:
In [6]: umsgpack.packb([0, 0, 'dummy_void_zeroarg', []]) Out[6]: '\x94\x00\x00\xc4\x12dummy_void_zeroarg\x90'
然而,似乎生成的十六进制字符串几乎可以在C++中使用,但不完全符合要求:
error: hex escape sequence out of range "\x94\x00\x00\xc4\x12dummy_void_zeroarg\x90"; ^~~~~
原因是编译器会将\x12d
解析为单个值。是否有一种方法可以将上面的十六进制字符串转换为Python中不包含字母(即仅包含\x
项)的字符串呢?
repr
的,我错过了那个。有一个简单的修复方法,但现在感觉有点像 hacky。 - TNWmap
是一个好的性能选择。CPython是否内联repr
调用呢?我预计对于更大的字符串会很慢。至于"%r",遗憾的是它会遇到相同的引号问题,但还是谢谢你提供这个信息 - 我之前并不知道。至于str.format()
- 是的,我会进行替换。 - TNWrepr
的循环是O(n)的方法。但是在源字符串上使用str.join()
也是如此。然而,这两个循环都完全在C中执行。 - Martijn Pieterstimeit
并查看。 - TNW