You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3中如何将接收的double值解码为对应字符串?

问题

我需要实现这样的功能:把字符串对应的内存地址转成double值传输,再将接收到的double值解码回原字符串。已经用C语言实现了该功能:

C语言发送端(TX)

char name[6] = "me123";//对应的十进制地址值为2127182692
send((double)(long)name);

C语言接收端(RX)

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

但在Python3里没法实现接收端的解码逻辑,试了相关代码都报错,请问该怎么实现?

解决方案

先明确核心逻辑:C代码本质是把字符串的内存指针(整数)强制转成double类型发送,接收后再转回指针读取字符串。Python没有直接的指针操作,得通过字节转换+内存操作库ctypes来实现:

实现步骤与代码

import struct
import ctypes

# 替换为实际接收到的double值
rx_double = 2127182692.0

# 1. 将double转成字节,再解析回原指针地址(整数)
# 注意字节序:x86/AMD64系统用小端格式'<d',大端系统用'>d'
double_bytes = struct.pack('<d', rx_double)
# 64位系统用'<Q'(无符号长整型),32位系统替换为'<I'(无符号整型)
ptr_address = struct.unpack('<Q', double_bytes)[0]

# 2. 通过ctypes从内存地址读取字符串
# 将地址转为C风格字符指针
str_pointer = ctypes.c_char_p(ptr_address)
# 读取并解码字符串,根据实际编码调整(比如ascii)
result_string = str_pointer.value.decode('utf-8')

print(f"the string {result_string}")

关键注意事项

  • 必须保证Python与C代码运行在同一进程/共享内存空间,否则直接访问陌生内存地址会导致崩溃(不同进程的内存地址是独立的)。如果是跨进程/网络传输,这种用指针的方案不可行,应该直接传输字符串的字节数据。
  • 字节序要与C端系统一致:多数PC用小端(<),嵌入式或大型机可能用大端(>)。
  • 32位与64位系统要对应调整struct的格式符:32位用I,64位用Q。

内容的提问来源于stack exchange,提问作者SamL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:30:40