1> 如何判断一个板子的cpu 是big-endian 还是 Little-endian的?

用c实现非常简单,10行左右,就可以判断了, 关键考察新人是否了解了什么是endian ,big-endian与little-endian的区别在哪里, 如果这些不清楚,就算c再强,也是憋不出来的。

2> 判断了 endian 后, 如何进行转换, 写两个函数。

如果说上面的那个, 可能不能正确的考察出新人的c水平,下面这个,可就可以显示了。

尤其是写一个宏, 来实现。 我觉得宏最能体现出一个人的水平了, 大家都知道一个功能强大的,但是写法又
非常简单的宏,是不好写的。 尤其是注意类型转换, 大扩号什么的。 写一个函数就容易多了。

实现起来,或者 用宏,或者 用函数的形式, 都可以, 最好都试一下。
主要看的就是宏的使用。

比如:

写成函数的形式:
typedef unsigned int u32 ;
typedef unsigned short u16 ;

u16 bswap16(u16);
u32 bswap32(u32);

写成宏的形式:

#define BSWAP_16(x)
....
#define BSWAP_32(x)
....

比如: 0x1234 变成: 0x3412

或者: 0x12345678 变成 : 0x78563412

---
在下面的回复写出来,就有点乱了, 干脆在这里铁出来吧 ,格式比较好:

1》判断endian的问题, 很简单。

判断endian :
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
      short int a = 0x1234;
      char *p = (char *)&a;
    
      printf("p=%#hhx\n",*p);

if(*p == 0x34)
          printf("Little endian \n");
      else if(*p == 0x12)
          printf("Big endian \n");
      else
          printf("Unknow endian \n");

return 0;
}

2>如何进行转换:

#include <stdio.h>
#include <stdio.h>

typedef unsigned int u32;
typedef unsigned short u16;

#if 0
//simple: not check varible types

#define BSWAP_16(x) \
            ( (((x) & 0x00ff) << 8 ) | \
       (((x) & 0xff00) >> 8 ) \
       )

//complex:check varible types

#else
#define BSWAP_16(x) \
       (u16) ( ((((u16)(x)) & 0x00ff) << 8 ) | \
                   ((((u16)(x)) & 0xff00) >> 8 ) \
            )

#endif
#define BSWAP_32(x) \
       (u32) ( (( ((u32)(x)) & 0xff000000 ) >> 24) | \
                      (( ((u32)(x)) & 0x00ff0000 ) >> 8 ) | \
       (( ((u32)(x)) & 0x0000ff00 ) << 8 ) | \
       (( ((u32)(x)) & 0x000000ff ) << 24) \
                )

u16 bswap16(u16 x)
{
      return (x & 0x00ff) << 8 |
       (x & 0xff00) >> 8
      ;
}

u32 bswap32(u32 x)
{
      return       ( x & 0xff000000 ) >>24 |
          ( x & 0x00ff0000 ) >>8 |
          ( x & 0x0000ff00 ) <<8 |
          ( x & 0x000000ff ) << 24
      ;
}

int main(void)
{
      //u16 var_short = 0x123490;

//u32 var_int = 0x1234567890;

//关键是要能对错误进行处理,给一个0x123490 照样能得出 0x9034的值,而且, 占内存要小的

printf("macro conversion:%#x\n",BSWAP_16(0x123490 ));//要能正确转换

printf("macro conversion:%#x\n", BSWAP_32(0x1234567890)); //要能正确转换

printf("-----------------\n");
    
      printf("function conversion:%#x\n",bswap16(0x123490));
      printf("function conversion:%#x\n", bswap32(0x1234567890));
    
    
      return 0;
}

考察新人的两道c语言题目相关推荐

  1. 【LeetCode】两道贪心算法题目-455分发饼干,860柠檬水找零

    文章目录 第455题:分发饼干 第860题:柠檬水找零 第455题:分发饼干 题目描述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干.对每个孩子 i ,都有一个 ...

  2. 113道C语言题目,超经典的~~~

    1.输入两个正整数,m和n,求其最大公约数和最小公倍数. #include<stdio.h> void main() { int hcf(int,int);       int lcd(i ...

  3. 150分试卷c语言,连续5道C语言题目一共送150分啊,题目2.一个农场有头母牛,现 爱问知识人...

    从现在开始,牛的数量组成数列a[n]: 1,1,1,2,3,4,5,7,10,14,19,26...(n=0,1,--20) 求a[20] 从a[4]开始有规律a[i]=a[i-1]+a[i-4] 则 ...

  4. 腾讯实习生面试2016两道面试题目?(知乎)

    腾讯实习生面试2016两道面试题目?修改 谢谢大神们高质量的回答,满满干货,excited ------------------------------------------------------ ...

  5. 华为手撕代码c语言题目,想去面试?这10道最高频的手撕代码题都会了吗?

    原标题:想去面试?这10道最高频的手撕代码题都会了吗? 来源:Python与算法之美 ID:Python_Ai_Road 作者:梁云1991 想去看机会?下面这10道最高频的手撕代码面试题都会了吗? ...

  6. 2014年京东校招笔试中的两道java题目

    两道都是选择题 1,调用下面的函数的返回是(C) public static int testt() {try {return 1:}catch(Exception e){return 2;}fina ...

  7. BAT七年经验,却抵不过外企面试的两道算法题?

    整理| 琥珀 出品| AI科技大本营 又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素? 面试外企,却被两道算法题难住? 近日,一位网友在 ...

  8. BAT 七年经验,却抵不过外企面试的两道算法题?

    整理| 琥珀 出品| AI科技大本营 又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素? 面试外企,却被两道算法题难住? 近日,一位网友在 ...

  9. 0927_C/C++笔试题_10:16道c语言面试例子【2】

    16道c语言面试例子[2]: 2.写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个. #define MIN(x,y) ((x)<=(y)?(x):(y)) 这个测 ...

最新文章

  1. CentOS网络配置
  2. a Line Segment Detector
  3. 深度探索C++ 对象模型(6)-Data member的存取
  4. view bitmap 截图
  5. Android开发之蓝牙--扫描已经配对的蓝牙设备
  6. JavaScript数据结构与算法——列表详解(下),基于Nodejs实现一个列表应用
  7. java换水_java-交流灌水之谁是水王?
  8. 洛谷P2497:基站建设(splay、斜率优化)
  9. 数据可视化组件Grafana详细解读--RedHat/Fedora/CentOS/Oracle上的安装
  10. null=null不能作为关联条件
  11. Java——常用类(String)
  12. 基于java(springboot框架)的新闻管理系统 开题报告
  13. 利用WPS功能破解无线路由器PIN码
  14. java ssm旅游网站系统源码jsp maven项目推荐
  15. ArcGIS教程 - 8 空间数据拓扑处理
  16. 红外通信红外编码—NEC协议
  17. java单点登录SSO教程(含源码和视频教程)
  18. [python小工具]加减法出题器
  19. shopex php5.3 无法安装,php版本导致shopex4.8.5安装的问题
  20. 法语计算机相关书籍,法语网络计算机相关词汇

热门文章

  1. labview简易计算机实验报告,labview实验报告..doc
  2. OpenCV中的SURF(Speeded-Up Robust Features 加速鲁棒特征)
  3. LabVIEW仪表盘识别(实战篇—6)
  4. 【camera】基于深度学习的车牌检测与识别系统实现(课程设计)
  5. 增加一个dbe连接_pogo pin连接器是如何解决振动的问题?
  6. Vant简单H5 web app【小试牛刀】
  7. 在MacBook Pro 2015上安装iTerm2笔记
  8. js控制图片的缩放代码示例
  9. ceph pool 相关命令
  10. C语言网络编程:TCP编程模型