【问题标题】:How can a Python 2.7 string be interpreted as an integer like in C char array?如何将 Python 2.7 字符串解释为 C char 数组中的整数?
【发布时间】:2020-08-17 09:20:42
【问题描述】:

在 C 中,字符数组可以被 int * 引用或强制转换为整数值。这是一个小示例程序:

#include <stdio.h>

int main() {
   char *str = "AABB";
   int *i = (int *)str;
   printf("int value: %d\n", *i);
   return 0;
}

这会输出int value: 1111638337,即0x42424141。

如何在 Python 2.7 中实现这一点?我知道我可以使用 ord() 然后左移,但我认为有比这更好的解决方案。另外,如果有一种方法可以调整字节顺序,那也会很有帮助。

【问题讨论】:

  • 你想用这个来完成什么?看来您应该使用 bytearray 之类的东西而不是字符串。
  • @0x5453 我正在尝试反转用 C 编写的玩具级散列算法,这真的比什么都重要。我正在尝试使用它来了解有关 Python 的更多信息,因为我已经习惯了 C 具有的一些更底层的特性。我认为您是对的,应该将其转换为字节数组。
  • 在 C 中这样做是个坏主意,并且有时是未定义的行为,即使在严格的别名规则中使用 char 的特殊情况 - 可以访问有效类型的对象 int通过char *,但通过int * 访问有效类型char 的对象仍然是UB。
  • @user2357112supportsMonica 你是对的,它恰好是那个算法的作用。

标签: python c arrays python-2.7 endianness


【解决方案1】:

使用struct 模块将字节序列解释为C 风格的数据类型:

import struct
hex(struct.unpack("i", "AABB")[0])

这给了'0x42424141'

【讨论】:

  • 谢谢,这正是我所希望的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2019-08-27
  • 2016-06-04
  • 2012-10-28
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多