嵌入式笔试题

本文介绍了两道嵌入式软件面试的笔试题目,第一题涉及将浮点数的十六进制表示转换为浮点数变量,通过位移和按位或操作实现。第二题涉及字符串操作,包括复制字符串内容,提取浮点数值和字符值。代码示例展示了如何完成这些操作,并给出了运行结果。
摘要由CSDN通过智能技术生成

嵌入式笔试题

最近参加一场嵌入式软件面试,遂记录其中的两道题目下来。

数据转换
一个浮点数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;
}

运行结果截图:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值