嵌入式笔试题
最近参加一场嵌入式软件面试,遂记录其中的两道题目下来。
数据转换
一个浮点数123.456,对应的十六进制从 高位到低位依次是42,f6,e9,79
char c[4] = {0x42,0xf6,0xf9,0x79};
float f;
怎样让f数值为123.456?(不能写成f = 123.456)
#include <stdio.h>
#include <string.h>
float getFloat(unsigned char value1, unsigned char value2,unsigned char value3, unsigned char value4)
{
float fTemp;
unsigned int *pTemp = ( unsigned int *)&fTemp;
*pTemp = ((value1<<24)&0xff000000)|((value2<<16)&0xff0000)|((value3<<8)&0xff00)|(value4&0xff);
return fTemp;
}
int man()
{
printf("%f\n", getFloat(0x42,0xf6,0xE9,0x79));
return 0;
}
运行结果截图:
字符串操作
char *ptr =“value=123.456;flag=N”;
char buffer[64];
float fval;
char cval;
(1)将指针ptr数据复制到buffer数组里面;
(2)将字符串里面value等号后面的数据转换为浮点数,赋值给fval;将flag等号后面的字符赋值给cval。
#include <stdio.h>
#include <string.h>
int main()
{
char *ptr = "value=123.456;flag=N";
char buffer[64];
float fval;
char cval;
strcpy(buffer,ptr);//将指针ptr数据复制到buffer数组里面
strtok(buffer,"=");
fval = atof(strtok(NULL,";"));
strtok(NULL,"=");
cval = *strtok(NULL,"");
printf("fval = %f,cval = %c\n",fval,cval);
return 0;
}
运行结果截图: