-
2019-07-13 21:21:40
一个简单的问题搞了一个晚上。将4个字节 转换成python 的浮点数!终于发现
https://stackoverflow.com/questions/16087527/converting-a-float-in-chars-to-float-python
>>> import struct >>> x = [10, -41, -119, 65] >>> struct.unpack('<f', struct.pack('4b', *x))[0] 17.229999542236328
仍然有一点问题:后改为 “4B”。可以了。
多个浮点数的转换方式,ss 是多字节 list
ss=response["result"]["value"] tt=np.array(ss) yy=tt.reshape(16,4) for i in range(16): y[i]=struct.unpack('<f', struct.pack('4B',*yy[i]))[0]
再一次体会到过于灵活的语言,容易编程,难以排错。
更多相关内容 -
字节转浮点数工具
2015-09-23 22:26:06因为调试需要把下位机传上来的4字节数转成浮点数查看,网上找的都不能很好的使用,有的还有病毒,所以自己做了这个小程序。C#做的,机器上有.NET Fromwork 4就可以直接使用。 使用方法:在上面4个文本框中输入4个16... -
字节和浮点数转换工具
2017-09-04 18:30:34浮点数和16进制之间转换工具。纯绿色,免安装。使用方便,免费。谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢 -
Labview十六进制4字节与浮点数之间转换
2022-02-28 20:33:04自行设计,亲测无误,欢迎使用 -
LabVIEW 四字节数据转浮点数
2018-06-30 16:22:04通信接收四个字节转浮点小数和数据解包,测试成功,完美使用 -
浮点数与四字节转换+串口工具
2019-12-09 14:40:20附件包括一个C语言浮点数与四字节十六进制数转换工具,外加一个好用的串口工具,以下是凑字数可我哦我hi红旗河沟IQ -
好用的字节浮点转换小工具
2020-12-16 11:24:31方便的将字节转换为浮点型变量和将浮点型变量转换为字节,非常适合协议调试过程中进行校正。使用该小工具可以很方便的将协议解析为代码中使用的数据进行对比,否则还得使用系统自带的计算器进行单字节转换十分不方便... -
四字节与浮点数之间的转换(c语言实现)
2022-02-08 15:50:34四字节与浮点数之间的转换(c语言实现)C语言中对于float类型的数据,主要使用4字节进行存储,以下为干货。实现四字节与浮点数之间的转换。
0.头文件添加
#include <math.h>
1.浮点数转换为四字节
void FloatToByte(float floatNum,unsigned char* byteArry) { char* pchar=(char*)&floatNum; for(int i=0;i<4;i++) { *byteArry=*pchar; pchar++; byteArry++; } }
2.四字节转换为浮点数
typedef unsigned char byte; float b2f(byte m0, byte m1, byte m2, byte m3) { // 求符号位 float sig = 1.; if (m0 >=128.) sig = -1.; //求阶码 float jie = 0.; if (m0 >=128.) { jie = m0-128. ; } else { jie = m0; } jie = jie * 2.; if (m1 >=128.) jie += 1.; jie -= 127.; //求尾码 float tail = 0.; if (m1 >=128.) m1 -= 128.; tail = m3 + (m2 + m1 * 256.) * 256.; tail = (tail)/8388608; // 8388608 = 2^23 float f = sig * pow(2., jie) * (1+tail); return f; }
3.main函数进行测试
int main(void) { log_init(); while(1) { float c=0.04; unsigned char bcd[4]={0x0A, 0xD7, 0x23, 0x3D}; FloatToByte(c,bcd); NRF_LOG_INFO("%x %x %x %x\r\n",bcd[0],bcd[1],bcd[2],bcd[3]); float q=b2f(0xBB, 0x23, 0xD7, 0x0A);//反向 NRF_LOG_INFO("float NUM1 is :"NRF_LOG_FLOAT_MARKER"\r\n",NRF_LOG_FLOAT(q)); q=b2f(0x3D, 0x23, 0xD7, 0x0A);//反向 NRF_LOG_INFO("float NUM2 is :"NRF_LOG_FLOAT_MARKER"\r\n",NRF_LOG_FLOAT(q)); nrf_delay_ms(1000); } return 0; }
其中浮点数测试为0.04,通过log打印输出显示四字节:
四字节数据 0x0A,0xD7,0x23,0xBB转换浮点数显示为:
四字节数据 0x0A,0xD7,0x23,0x3D转换浮点数显示为:
4.整体代码
#include <math.h> typedef unsigned char byte; float b2f(byte m0, byte m1, byte m2, byte m3) { // 求符号位 float sig = 1.; if (m0 >=128.) sig = -1.; //求阶码 float jie = 0.; if (m0 >=128.) { jie = m0-128. ; } else { jie = m0; } jie = jie * 2.; if (m1 >=128.) jie += 1.; jie -= 127.; //求尾码 float tail = 0.; if (m1 >=128.) m1 -= 128.; tail = m3 + (m2 + m1 * 256.) * 256.; tail = (tail)/8388608; // 8388608 = 2^23 float f = sig * pow(2., jie) * (1+tail); return f; } void FloatToByte(float floatNum,unsigned char* byteArry) { char* pchar=(char*)&floatNum; for(int i=0;i<4;i++) { *byteArry=*pchar; pchar++; byteArry++; } } int main(void) { log_init(); while(1) { float c=0.04; unsigned char bcd[4]={0x0A, 0xD7, 0x23, 0x3D}; FloatToByte(c,bcd); NRF_LOG_INFO("%x %x %x %x\r\n",bcd[0],bcd[1],bcd[2],bcd[3]); float q=b2f(0xBB, 0x23, 0xD7, 0x0A);//反向 NRF_LOG_INFO("float NUM1 is :"NRF_LOG_FLOAT_MARKER"\r\n",NRF_LOG_FLOAT(q)); q=b2f(0x3D, 0x23, 0xD7, 0x0A);//反向 NRF_LOG_INFO("float NUM2 is :"NRF_LOG_FLOAT_MARKER"\r\n",NRF_LOG_FLOAT(q)); nrf_delay_ms(1000); } return 0; }
-
4字节数组转换为浮点数(c)
2021-05-20 19:53:554字节数组转换为浮点数(c) e911bd41 d867e641 8084e941 e911bd41,d867e641,8084e941 0.00000,0.00000,0.00000 使得四个数据到一个int值正常工作。 PM_int[0],PM_int[1],PM_int[2] 但是,如果您尝试将其转换为浮点...void OPC_N2_data_read()
{
unsigned int32 iobyte[3][4] = {0x00, };
int32 PM_int[3] = {0x00, };
float PM[3] = {0x00, };
int8 i,j,k;
int8 mask = 0x80;
const int16 mask1 = 0x0001;
const int16 mask0 = 0x0000;
int8 trash_byte = 0x32;
output_bit(ss,1);
output_bit(PM_CLOCK_pin,0);
delay_us (1);
output_bit(ss,0);
delay_us (2);
for(i = 0 ; i < 3 ; i ++)
{
for (j = 0 ; j < 4 ; j ++)
{
for (k = 0 ; k < 8 ; k ++)
{
output_bit(PM_CLOCK_pin,1);
iobyte[i][j] = iobyte[i][j] << 1;
if (input (PM_MISO_pin))
{
iobyte[i][j] |= mask1;
}
else
{
iobyte[i][j] |= mask0;
}
if ((trash_byte & mask) >0)
{
output_high(PM_MOSI_pin);
}
else
{
output_bit(PM_MOSI_pin,0);
}
delay_us(1);
output_bit(PM_CLOCK_pin,0);
delay_us(5);
mask = mask >>1;
}
}
}
delay_us(3);
output_high(ss);
for(i = 0; i<3; i++)
{
PM_int[i] = ((iobyte[i][0]<<24)|(iobyte[i][1]<<16)|(iobyte[i][2]<<8)|(iobyte[i][3]));
PM[i] = *(float*)&PM_int;
}
printf ("%x%x%x%x\r\n",iobyte[0][0],iobyte[0][1],iobyte[0][2],iobyte[0][3]);
printf ("%x%x%x%x\r\n",iobyte[1][0],iobyte[1][1],iobyte[1][2],iobyte[1][3]);
printf ("%x%x%x%x\r\n",iobyte[2][0],iobyte[2][1],iobyte[2][2],iobyte[2][3]);
printf ("%lx,%lx,%lx\r\n", PM_int[0],PM_int[1],PM_int[2]);
printf ("%3.5f,%3.5f,%3.5f\r\n", PM[0],PM[1],PM[2]);
}
我从一个4字节数组接收数据。 该数据是一个浮点值。 我通过电脑检查,我看到以下内容。4字节数组转换为浮点数(c)
e911bd41 d867e641 8084e941 e911bd41,d867e641,8084e941 0.00000,0.00000,0.00000
使得四个数据到一个int值正常工作。 PM_int[0],PM_int[1],PM_int[2]
但是,如果您尝试将其转换为浮点值,则只会显示0.00000。
我不知道问题出在哪里。
2016-11-11
이세영
+0
'PM [I] = *(浮子*)&PM_int;'场所严格的锯齿规则。改用'memcpy'。 –
+2
@ user694733:'memcpy'也会打断它们。打字的唯一完全合法的方式是“联合”。尽管如此,OP应该使用适当的(de)序列化,使用bitshifts和掩码到'uint32_t',然后使用'union'。 –
+1
1)不要使用有符号整数作为位移。某些值将调用未定义的行为,对于其他值则会执行定义。 2)使用固定宽度类型的标准类型,没有自制东西!请参阅'stdint.h' –
-
C程序中用union实现浮点数与IEEE格式转换
2020-07-13 15:36:22例如,浮点数50.0,在通信中传送的是它的IEEE-754格式,即4字节的十六进制424800H.因此,单片机的C程序,在发送或接收外围设各的参数值时,需要解决如何实现浮点数与IEEE格式转换的问题。 2.IEEE浮点数的格式 在... -
4字节浮点数算法
2013-10-14 13:46:534字节浮点数算法 -
浮点数与4字节数值相互转换工具
2015-12-18 22:57:12浮点数与四个字节数值相互转化的工具。例如浮点数20.12转化为C3 F5 A0 41四个字节。 -
IEEE 754:字节数组转浮点数(单精度),浮点数(单精度)转16进制
2021-02-27 10:44:021,字节数组转浮点数(单精度)。指针法 c/c++: float 类型变量 占 4 个 byte, #include <stdio.h> #include <stdlib.h> int main() { unsigned char v_byte[4] = {0xC3, 0xF5, 0x48, 0x40}; ...
参考博客:十六进制转浮点数的通用方法
0,说明:这里不介绍原理,只记录C/C++语言简便的转换方法。
1,字节数组转浮点数(单精度)。指针法
c/c++: float 类型变量 占 4 个 byte,
#include <stdio.h> #include <stdlib.h> int main() { unsigned char v_byte[4] = {0xC3, 0xF5, 0x48, 0x40}; float v_float = *((float *)v_byte); printf("v_float = %f", v_float); return 0; }
运行结果:
2, 浮点数(单精度)与 16进制字节数组 互相转换。使用共用体:union
#include <stdio.h> #include <stdlib.h> typedef union union_MEM32 { float fv; struct { unsigned char _0; // LSB unsigned char _1; unsigned char _2; unsigned char _3; // MSB }uint8; }uMEM32; int main() { //test 01 ,常量:π=3.14... uMEM32 value1; value1.fv = 3.14; printf("test 01: float->bytes: 0x%X 0x%X 0x%X 0x%X\n", value1.uint8._0, value1.uint8._1, value1.uint8._2, value1.uint8._3); //test 02,自然常数:e=2.71... uMEM32 value2; value2.uint8._0 = 0xA4; value2.uint8._1 = 0x70; value2.uint8._2 = 0x2d; value2.uint8._3 = 0x40; printf("test 02: bytes->float: %f\n", value2.fv); return 0; }
运行结果:
-
4字节十六进制转浮点数工具(Excel)
2016-02-26 12:02:07用excel表实现的4字节十六进制转浮点数的小工具,打开excel表后需要启用宏才能正常使用。 -
浮点与字节转换工具.exe
2020-09-04 14:11:50单精度浮点数与16进制数相互转换工具,单精度浮点数与16进制数相互转换工具,单精度浮点数与16进制数相互转换工具, -
VB字节数组与浮点数相互转换
2019-04-25 11:23:48来自链接https://bbs.csdn.net/topics/60230602,https://zhidao.baidu.com/question/174853612210120244.html 1.方式1 Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As ... -
labview 浮点数和字节相互转换
2019-03-25 00:46:16labview 浮点数和字节相互转换,常用与单片机或其他外设通讯 -
浮点数与字节数据转换详解
2017-10-23 21:01:54本文参考网络上的诸多文章,首先分析了单精度浮点数是如何在机器中存储的,然后将浮点数转换为内存中显示的字节数据,进而又将字节数据转换为单精度浮点数。主要用于对数据存储的分析和字节流转换为有效数据方面。 -
JS - 4字节转单精度浮点数
2020-07-20 20:04:12虽然我们的数值类型包含浮点数整数等,但是在这里统称为 数值类型。同时 JavaScript 拥有动态类型,我们定义变量时无须指定数据类型。这也意味着我们的强制转换在JS中将失效。 若在 C/C++ 中,可以通过内存转换或... -
浮点数与标准C语言浮点数格式(IEEE标准)转换
2020-12-31 09:47:59应用中通过C语言浮点数格式(IEEE-754标准)来进行数据转换。将待转换的的浮点数依照IEEE-754标准进行转换,利用转换后的数据进行数据传输。如果通过普通的程序进行转换,其转换过程略显繁琐。考虑到C语言中浮点数本身... -
C# 串口通讯截取4位字节数据16进制转浮点型输出
2018-01-29 18:10:01本程序是用串口工具读取一个电流表的通讯程序的源代码,要求将返回的4位字节数据()16进制)转浮点型实时输出到窗体上 -
浮点数转换4字节十六进制工具
2009-05-06 16:26:54本工具可以将浮点数转换为4个字节的十六进制数。同样也可以逆转换。适用于将单片机数据还原显示 是搞上位机不错的工具。 -
数据解析-四字节十六进制数转化为浮点数
2022-05-11 10:13:52//将表示X十六进制的四个字节调整顺序、合并,赋值给buffer 二、数据转换 此数据是十六进制的四字节,表示浮点数,有人写了相关的代码,用来转换,但是我觉得好麻烦,找到了下面一句代码就能解决的办法。... -
原始二进制怎么转换成对应的浮点数
2021-05-19 09:16:40或者提供一些资料什么的,谢谢啦, 遇到的是3个字节表示浮点数的 然后数据定义是在一个通讯协议里,协议已经很老了,但是还是有说明这3个字节的占位。 最后就是对数据拿来后进行转换,写个转换函数就能匹配到正常的... -
Labview 十六进制四字节转浮点数
2018-09-17 15:18:07自动将十六进制字符串转换为浮点数数组,可解决广大labview初学者开始学习时遇到的困难,可直接作为调用,并且转化成浮点数数组提高了自动转化效率, -
浮点数与4个字节的转换
2018-01-31 13:59:55通常是将浮点数乘以一个倍数,如10,100,1000,10000等,然后将其转换为整型数据再转化为单个字节进行传送。如果这个数据是要进行显示的话,那么这样做并没有什么不好。但是如果这个数是要传输给另端进行继续计算的... -
4字节浮点数计算工具
2009-03-05 11:13:18为了方便调试电力通信规约,自己写的一个小工具,主要是计算浮点数使用,计算4字节的浮点数.附加了16进制转化10进制的功能. -
4字节16进制数转换为float浮点数的原理及Qt算法实现示例
2020-09-21 15:31:41使用C++位运算实现4字节十六进制数转换为float数,在项目应用中需要此函数,没有找到合适的现成实现代码,所以自己编写实现了一个函数,希望对用着的朋友有帮助 -
通过Python实现4字节32位二进制转换为十进制单精度浮点数
2020-11-06 23:32:08与底层设备做通讯,无论是串行通讯还是TCP,经常遇到以字节形式传输的数据格式,得到底层报文后的数据解析就成了重点。 这个百度求解的过程真是一言难尽,大部分都是复制粘贴,不知所云。 这里将最终结果记录... -
c#进制数据转换、位操作、字节数组转换浮点数
2019-04-25 15:06:32来自链接https://bbs.csdn.net/topics/380229242,...1.浮点数转换成字节数组 private void button1_Click(object sender, EventArgs e) { float l_...