【问题标题】:how to decode long int to its string value in python如何在python中将long int解码为其字符串值
【发布时间】:2022-10-25 23:45:52
【问题描述】:

任何数据,string/long/dobule 或以十六进制或十进制值保存在内存中。

根据我的观点,我想得到字符串的双精度值并通过传输发送它将接收到的双精度值解码为字符串.

在 C 中,我可以得到以下工作。

德克萨斯州

char name[6] = "me123"//underline decimal value is 2127182692
send((double)(long)name);

接收

double rx_val = receive();
char *new_string = (char*)(long)rx_val ;
printf("the string %s \n", new_string );

我无法通过 python3 使用 RX 成功。

尝试以下

出错了

如何获得双值字符串解码开始工作?

【问题讨论】:

  • 你想要encode,而不是decode
  • 附言您的 C 代码也没有任何意义。我不知道您是如何得出 2127182692 的值的。
  • 如果实际使用了该代码,则该值可能是指针值(内存地址)。 - 尽管即使是它们,也打印为“长”,而不是“双”。
  • 你说的都对,感谢指出错误
  • 正确值为 2130705428

标签: python python-3.x string


【解决方案1】:

Python 中的普通字符串表示 Unicode 对象——它们必须被转换第一的使用.encode(...) 方法由特定编解码器转换为具体的字节表示。默认情况下,使用utf-8,但可以使用任何编码,并且如果您获得的文本超出了与 Unicode 代码点 (32-127) 的 ASCII 对应关系,则必须使用此编码。

完成后,Python 中的int 类有一个方便的“from_bytes”方法,可以将你想要的字节数组合成一个数值。

简而言之:

mytext = "me123"
mybytes = mytext.encode("utf-8")
mynumber = int.from_bytes(mybytes, "little")
print(mynumber)

现在,如果您希望字节看起来像 C 双精度 (float64),那么您可以使用 struct 模块将每个 8 字节解码为双精度。但是请注意,您有责任将字节字符串填充为 8 个字节 (你也对C语言负责,你没有这样做,并且可能已经编码了垃圾并且确实冒着分段错误的风险,无论如何)

mytext = "me123"
mybytes = mytext.encode("utf-8")
mybytes += b"
【解决方案2】:

以下为我工作了最多 6 个字节。我在这里处理超过 6 个字节时仍然遇到问题。

C

   char temp_id[8] = "smg123";
    char dbl_to_str[8];
    uint64_t id = 0;
    memcpy(&id, temp_id, 8);
    memcpy(dbl_to_str, &id, 8);
    printf("Double to String %s
", dbl_to_str);

Python

打印(消息。数据,数据)

打印

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多