首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中从C打印一个双精度值

在Python中从C打印一个双精度值
EN

Stack Overflow用户
提问于 2017-12-12 22:47:04
回答 0查看 310关注 0票数 1

我使用lwIP通过TCP从C发送了一个双精度值。为此,我使用了一个8字节的双精度字符串和一个字符串之间的联合(因为lwIP发送数据的函数是'char *‘类型)。te代码如下:

代码语言:javascript
运行
复制
void process_echo_request(void *p) {
int sd = (int)p;
int RECV_BUF_SIZE = 2048;
char recv_buf[RECV_BUF_SIZE];
int n, nwrote;
union {
    double dval;
    char   sval[sizeof(double)];
    } data_to_send;

data_to_send.dval = 1e+23;

while (1) {
    /* read a max of RECV_BUF_SIZE bytes from socket */
    if ((n = read(sd, recv_buf, RECV_BUF_SIZE)) < 0) {
        xil_printf("%s: error reading from socket %d, closing socket\r\n", __FUNCTION__, sd);
        break;
    }

    /* break if the recved message = "quit" */
    if (!strncmp(recv_buf, "quit", 4))
        break;

    /* break if client closed connection */
    if (n <= 0)
        break;

    data_to_send.dval += 1e+23;
    /* handle request */
    if ((nwrote = write(sd, data_to_send.sval, 8)) < 0) {
        xil_printf("%s: ERROR responding to client echo request. received = %d, written = %d\r\n",
                __FUNCTION__, n, nwrote);
        xil_printf("Closing socket %d\r\n", sd);
        break;
    }
}

/* close connection */
close(sd);
vTaskDelete(NULL);

我试图从Python脚本中读取,但在获取双精度值时失败。代码:

代码语言:javascript
运行
复制
#!/usr/bin/env python

import socket
from ctypes import *

TCP_IP = '192.168.0.10'
TCP_PORT = 1000
BUFFER_SIZE = 8

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(" ")
data = s.recv(BUFFER_SIZE)
s.close()

print float(data)

它失败并显示消息ValueError: could not convert string to float: �J��-�D I know,是因为字符串不是实值的字面表示。有什么想法吗?我需要实际的(双精度)值。

有关更多信息,请参阅在Zynq7000 FPGA+SoC上运行的lwIP回应服务器。我在Debian8上运行Python代码。双精度值是传感器的64位温度。

--编辑--最终的工作代码是:

代码语言:javascript
运行
复制
#!/usr/bin/env python

import socket
from struct import *

TCP_IP = '192.168.0.10'
TCP_PORT = 1000
BUFFER_SIZE = 8

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(" ")
data = s.recv(BUFFER_SIZE)
s.close()

print unpack("d",data)[0]
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47775369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档