【问题标题】:Convert hex string to little endian将十六进制字符串转换为小端
【发布时间】:2016-02-19 15:29:49
【问题描述】:

我想转换十六进制的字符串表示,例如:

"18ec1975b97174"

到小端字符串。 我对python很熟悉,所以我可以用

struct.pack("<L", "18ec1975b97174")

在 C++ 中什么是等价的?可以处理字符串还是我应该先将其转换为数值?

【问题讨论】:

  • 你的问题有点不清楚。字符串只是字节序列,“字节顺序”术语不适用。你想转换数字,表示为字符串?没有标准的 C++ 工具可以处理大于 64 位宽度的数字。您可以手动完成。
  • struct.pack("&lt;L", "18ec1975b97174") 给了我一个错误:struct.error: required argument is not an integer
  • 请说出预期的结果。或者至少给出一个正确的 Python 等价物! C 可以轻松做你想做的事,但目前我猜不出你想要什么......
  • 您的 python 示例不起作用。我想你的意思是struct.pack("&lt;L", 0x18ec1975b97174)?也许?哦,其实我觉得你也不是这个意思。我想你想颠倒文本所代表的“字节”的顺序吗?无论哪种方式,您的 Python 版本都不会像您认为的那样工作。
  • 我认为,在 python 中,您的意思类似于:"".join(reversed([x[i:i+2] for i in range(0, len(x), 2)])) 其中 x 是您的输入字符串? (如果输入字符串不是偶数个字符,则此代码不起作用,但我只是想说明一种方法)。我的意思是,我怀疑您可以将其音译为 C++(使用带有 += 2 增量器和缓冲区的 for 循环将结果写入其中,但我对 C++ 的了解不足以回答...)

标签: python c++ endianness


【解决方案1】:

如果您使用的是使用 little endian 的机器,在 C++ 中您可以使用 NTOH functions

这些会将网络顺序(大端)的数字转换为主机顺序(小端)。

这仅适用于数值。

【讨论】:

    猜你喜欢
    • 2012-09-04
    • 2018-01-31
    • 2018-01-22
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多