当前位置: 首页 > 编程日记 > 正文

考察新人的两道c语言题目

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;
}

相关文章:

《Adobe After Effects CC经典教程》——导读

前 言 After Effects CC提供了一套完整的2D和3D工具&#xff0c;动态影像专业人员、视频特效艺术家、网页设计人员以及电影和视频专业人员都可以用这些工具创建合成图像、动画和特效。After Effects被广泛应用于电影、视频、DVD以及Web的后期数字制作之中。After Effects可以以…

scanf()函数的用法和实践

scanf()函数的用法和实践摘要&#xff1a; 本文阐述了基于ANSI&#xff0c;Win 95&#xff0c;Win NT上的 C/C语言中scanf()函数的用法&#xff0c;以及在实际使用中常见错误及对策。 关键词&#xff1a; scanf()一、 序言 在CSDN论坛的C/C版块&#xff0c;我时常见…

邢波出任全球第一所AI大学校长,履历横跨三门学科

整理 | 高卫华出品 | AI科技大本营近日&#xff0c;世界上第一家研究型人工智能大学——Mohamed bin Zayed University of Artificial Intelligence&#xff0c;简称MBZUAI大学&#xff08;MBZUAI&#xff09;&#xff0c;任命著名华人AI学术教授邢波为校长。据悉&#xff0c;首…

Ubuntu 10.10 安装 libx11-dev

今天&#xff08;2013-04-11&#xff09;尝试安装 ImageMagick&#xff0c;结果发现 config.log 文件中包含了如下错误信息&#xff1a; fatal error: X11/Xlib.h: No such file or directory 也就是说缺少了 libx11-dev 包&#xff0c;心想这有什么难的&#xff0c;直接通过 a…

《计算机组成原理》----2.6 浮点数

本节书摘来自华章出版社《计算机组成原理》一书中的第2章&#xff0c;第2.6节&#xff0c; 作 者 Computer Organization and Architecture: Themes and Variations&#xff3b;英&#xff3d;艾伦克莱门茨&#xff08;Alan Clements&#xff09; 著&#xff0c;沈 立 王苏峰…

javascript/dom:原生的JS写选项卡方法

来源:http://www.jb51.net/article/30108.htm <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-…

CSDN 星城大巡礼,长沙“科技之星”年度企业评选正式开启

2020年&#xff0c;长沙市委主要领导发出“软件产业再出发”的号召&#xff0c;颁布了软件三年行动计划。今年5月&#xff0c;CSDN 作为专业的 IT 社区&#xff0c;与长沙高新区签约&#xff0c;将全国总部落户长沙&#xff0c;这一战略决策&#xff0c;让CSDN与长沙的联结进一…

Linux下用C获取当前系统时间

#include <time.h> time_t time(time_t calptr); 返回的是日历时间&#xff0c;即国际标准时间公元1970年1月1日00 : 00 : 00以来经过的秒数。然后再调用 char *ctime(const time_t calptr) ; 转化为字符串表示 #include <stdio.h> #inc…

Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)

计划按例如以下顺序完毕这篇笔记&#xff1a;Java程序猿的JavaScript学习笔记&#xff08;1——理念&#xff09; Java程序猿的JavaScript学习笔记&#xff08;2——属性复制和继承&#xff09; Java程序猿的JavaScript学习笔记&#xff08;3——this/call/apply&#xff09; J…

关于动态规划,你想知道的都在这里了!

作者 | Your DevOps Guy翻译| 火火酱~&#xff0c;责编 | 晋兆雨出品 | AI科技大本营头图 | 付费下载于视觉中国什么是动态规划&#xff1f;它又有什么重要的呢&#xff1f;在本文中&#xff0c;我将介绍由Richard Bellman在20世纪50年代提出的动态规划&#xff08;dynamic pro…

Tcpdump命令的使用与示例——linux下的网络分析

顾名思义&#xff0c;TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤&#xff0c;并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是一种免费的网络分析工具&#xff0c;尤其其提供了源代码&a…

document.getElementById与getElementByName的区别

document.getElementById( "id_Number ") 得到的是单个元素 document.getElementsByName( "name ") 得到的是数组 转载于:https://www.cnblogs.com/qiuh/archive/2013/04/16/3023596.html

HDU 3507:Print Article

HDU 3507&#xff1a;Print Article 题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid3507 题目大意&#xff1a;给定$n$&#xff0c;$m$&#xff0c;输出序列$n$个数&#xff0c;每连续输出代价为连续输出的数字和的平方加上$m$. 斜率优化DP 定义$sum_{pq}\su…

Linux wait函数解析

进程一旦调用了 wait&#xff0c;就 立即阻塞自己&#xff0c;由wait自动分析是否当前进程的某个子进程已经退出&#xff0c;如果让它找到了这样一个已经变成僵尸的子进程&#xff0c;wait 就会收集这个子进程的信息&#xff0c; 并把它彻底销毁后返回&#xff1b;如果没有找到…

Python多阶段框架实现虚拟试衣间,超逼真!

作者 | 李秋键 责编 | 晋兆雨 头图 | CSDN下载自视觉中国 任意姿态下的虚拟试衣因其巨大的应用潜力而引起了人们的广泛关注。然而&#xff0c;现有的方法在将新颖的服装和姿势贴合到一个人身上的同时&#xff0c;很难保留服装纹理和面部特征(面孔、毛发)中的细节。故在论文《Do…

百度重置页面自动跳转脚本

大家都知道的原因&#xff0c;百度现在不允许其它搜索引擎直接进入的它旗下的所有站点&#xff0c;在痛苦的被增加了很多点击后写了这个自动跳转的脚本。 原来不只搜索引擎&#xff0c;其它网站的链接也被搞了&#xff0c;nnd&#xff0c;诅咒百度。 使用方法&#xff1a;用xxx…

MYSQL 数据库迁移 ***

1. 导出数据库数据mysqldump -uroot -p webCompile > webCompileOut.sql其中&#xff1a;root 是账户名webCompile 是需要导出的数据库名称webCompileOut.sql 存储导出的数据2. 将导出SecureCRT sz【下载】的数据webCompileOut.sql放到你的目标机器…

exec函数族的使用

调用shell脚本命令&#xff1a;execlp("sh","sh","filename",(char*)0);exec用被执行的程序完全替换调用它的程序的影像。fork创建一个新的进程就产生了一个新的PID&#xff0c;exec启动一个新程序&#xff0c;替换原有的进程&#xff0c;因此这…

全球首个突破200种语言互译的翻译引擎,百度翻译打破世界沟通壁垒

机器翻译作为人工智能关键技术之一&#xff0c;正日益成为企业智能化升级的重要应用场景。12月1日&#xff0c;百度大脑开放日举办了以“机器翻译 沟通全世界”为主题的专场活动。 IDC 中国副总裁兼首席分析师武连峰、百度 AI 技术生态部总经理刘倩、百度人工智能技术委员会主席…

倍福TwinCAT(贝福Beckhoff)基础教程5.1 TwinCAT-2 运行可执行文件

个人认为这条命令做的参数比较混乱&#xff0c;PATHSTR是指可执行文件路径最终文件名&#xff0c;DIRNAME是指可执行文件路径&#xff0c;最后COMNDLINE可有可无&#xff0c;是指带参数运行启动的文件 测试可以正常运行

Linux系统的大小端模式

大端模式所谓的大端模式&#xff0c;是指数据的低位&#xff08;就是权值较小的后面那几位&#xff09;保存在内存的高地址中&#xff0c;而数据的高位&#xff0c;保存在内存的低地址中&#xff0c;这样的存储模式有点儿类似于把数据当作字符串顺序处理&#xff1a;地址由小向…

CSDN插件限时内测,新用户抢永久免费去广告特权!

经过程序猿哥哥们和产品小姐姐马不停蹄的疯狂加班&#xff0c;CSDN 官方出品的PC浏览器插件–开发者助手 终于正式上线啦&#xff01;一键万能操作&#xff0c;新标签页极简个性&#xff0c;让你的浏览器更酷更高效&#xff01;还有超多实用彩蛋功能等你来解锁&#xff01;现在…

你必须知道的.net学习总结

着几天在看《你必须知道的.net》&#xff0c;这次看书和以往不同&#xff0c;以前是把自己喜欢的章节看了。但是这次决定把一本书详细的看看。 在第一章第一节中主要讲的是“对象”,我想每一个程序员都对&#xff0c;“对象”有理解。 我来说说书中所说的对象吧。。 我只是把认…

Mybatis 基本配置, 面向接口

< 一 > 主配置文件 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><…

据说看完这21个故事的人,30岁前都成了亿万富翁。你是下一个吗?

1.甲去买烟&#xff0c;烟29元&#xff0c;但他没火柴&#xff0c;跟店员说&#xff1a;“顺便送一盒火柴吧。”店员没给。 乙去买烟&#xff0c;烟29元&#xff0c;他也没火柴&#xff0c;跟店员说&#xff1a;“便宜一毛吧。”最后&#xff0c;他用这一毛买一盒火柴。 这是…

助力视障人士,微软等公司捐赠首批AI有声内容

12月2日&#xff0c;微软与周迅AI语音红丹丹公益项目发起人鹿音苑文化传播公司&#xff0c;以及来自微软及各界的150名余志愿者&#xff0c;将创作的首批人工智能有声内容&#xff0c;包括鲁迅、老舍、萧红、朱自清等作家的一系列经典作品、红丹丹文化期刊&#xff0c;正式捐赠…

能和LoadRunner匹敌的VS2010/2012Web负载测试

VS自带的Web负载测试真的很大程度上能和专业的loadrunner媲美&#xff08;只是Web方面&#xff09;&#xff0c;上个report图吧&#xff08;如何实现&#xff0c;请往下拉&#xff09;&#xff1a; 看&#xff0c;能探测一堆的计数器&#xff08;上面红色打叉的是代表超过了基线…

设置编码格式为utf8

response.setCharacterEncoding("UTF-8"); 在Servlet2.3中是不行的&#xff0c;至少要2.4版本才可以&#xff0c;如果低于2.4版本&#xff0c;可以用如下办法&#xff1a; response.setContentType("text/html;charsetUTF-8"); pageEncoding"UTF-8&qu…

Linux 命令集锦

linux下查看监听端口对应的进程 # lsof -i:9000 # lsof -Pnl M -i4# lsof -i | grep 9054 如果退格键变成了&#xff1a;"^h"。 终端连接unix删除退格键&#xff0c;按住CTL键同时按deleteLinux搜索 # find / -name "xxx.conf"查看linux是32位还是64位的命…

mysql (双主,互主)

Master-Master&#xff08;双主&#xff09; 1、测试环境 Master/Slave Master1/Slave1 IP 192.168.1.13 192.168.1.10 为了保持干净的环境&#xff1a;两边服务器 rm -rf /var/lib/mysql/* service mysqld re…