将浮点值存储到无符号字符数组
Posted
技术标签:
【中文标题】将浮点值存储到无符号字符数组【英文标题】:storing float value to unsigned char array 【发布时间】:2012-11-12 22:12:03 【问题描述】:很抱歉问这个问题,但我已经搜索了这个小东西,并在下面的链接中找到了相关的东西,但无法得到任何想法
How to store floats in array to be used later?
storing in unsigned char array
如何将浮点值(假设为 0.00895)存储到无符号字符中,该字符稍后用于存储在内存缓冲区中。
稍后我需要读回数组并想从内存中读回它。
谢谢
【问题讨论】:
为什么需要(想要)将浮点值存储在 unsigned char 数组中?您可以使用浮点值。在每种情况下,它都作为字节块保存在内存中。 因为我用于将数据存储到内存中的缓冲区函数将其参数作为无符号字符。我没有得到你的浮点值? 【参考方案1】:你不需要 memcpy
来做这个......如果你将一个浮点数组复制到内存中其他地方的缓冲区中,这将很有用。您真正需要的是使用不同的指针类型来查看字符数组。
const size_t BUFSIZE = 4096;
char buffer[BUFSIZE];
float *f_buf = (float*)buffer;
如果您只想在缓冲区的开头插入一个浮点数,则以下两行中的任何一行都可以:
*f_buf = 0.00895;
f_buf[0] = 0.00895;
它真正做的只是让您将缓冲区视为浮点数组。
int i;
/* Put a bunch of floats into the buffer */
for( i = 0; i < 10; i++ )
f_buf[i] = i / 2;
/* Display contents of buffer in hex */
for( i = 0; i < 10 * sizeof(float); i++ )
printf( "%02x", (int)buffer[i] );
printf( "\n" );
/* Sanity-test the buffer contents */
for( i = 0; i < 10; i++ )
printf( "%d: %f\n", i, f_buf[i] );
【讨论】:
是的,这看起来就是我要搜索的内容,但我想将浮点值存储在无符号字符中。 您的意思是unsigned char
的数组,对吗?在这种情况下,在我的示例中使用unsigned char
而不是char
。没有什么不同的。如果你的意思是 single unsigned char
,那你就是在做梦。一个float
占用四个字节,而一个char
只占用一个。
当我尝试像这样*f_buf = 0.00895; check =buffer[0]; sprintf(value_current,"%f",check); position =0x40; Lcd_move(position); Lcd_puts (value_current);
测试缓冲区内容时,输出为 152,但缓冲区实际上包含 0.00895。这个值是多少?
我认为这不是 wrkng const size_t BUFSIZE = 4096; char buffer[BUFSIZE]; float *f_buf = (float*)buffer;
在十六进制转储中,我希望看到 80 个字符(每个字节 2 个十六进制数字),但我看到的却更多。例如,这是我在我的机器上运行它时得到的结果(浮点数是 4 个字节)知道为什么吗?
【参考方案2】:
您可以将浮点数的内存复制到字符缓冲区中。
float a;
char buffer[sizeof(float)];
memcpy(buffer,&a,sizeof(float));
【讨论】:
我可以使用 sprintf(value_current,"%d",buffer[0]);在缓冲区第 0 个元素中查看我的输出。我能看到缓冲区的数据吗?以上是关于将浮点值存储到无符号字符数组的主要内容,如果未能解决你的问题,请参考以下文章