第一题:使用C语言完成ASCII码和十六进制的互相转换(举例:“0x55"转0x55;0xAA转"0xAA”);
答案:参考link
unsigned char char_to_hex(unsigned char char_num)
{
if ((char_num >= '0') &&(char_num <= '9'))
{
/* code */
char_num = 0x30+(char_num - '0');
}
else if ((char_num >= 'A') &&(char_num <= 'Z'))
{
/* code */
char_num = 0x41+(char_num - 'A');
}
else if ((char_num >= 'a') &&(char_num <= 'z'))
{
/* code */
char_num = 0x61+(char_num - 'a');
}
else
char_num = 0xff;
return char_num;
}
//16进制转ascii
unsigned char hex_to_char(unsigned char hex_num)
{
if ((hex_num>=0x30) && (hex_num<=0x39))
{
/* code */
hex_num = '0'+ hex_num - 0x30;
}
else if ((hex_num>=0x41) && (hex_num<=0x5A))
{
/* code */
hex_num = 'A' + (hex_num - 0x41);
}
else if ( (hex_num>=0x61) && (hex_num<=0x7A))
{
/* code */
hex_num = 'a' + (hex_num - 0x61);
}
else
hex_num = 0xff;
return hex_num;
}
第二题:下列函数会有什么结果
void Test(void){
char *str = (char *)malloc(100);
strcpy(str,"hello");
free(str);
if(str != NULL){
strcpy(str,"world");
printf(str);
}
}
答案:输出结果为world;
第三题:(*(void(*)())0)();
什么意思
答案:借鉴链接: link
从内向外看:1、void(*)()
跟void(*fp)()
一个类型;是一个函数,无返回值,无参数,函数名有*就
是函数指针类型;
2、(void(*)())0
跟(int)0
一个道理;强制转换,把0强制转换成函数指针,即地
址;
3、*(void(*)())0
跟int *p = &a;*p=
就是取地址内的内容,内容是一个函数;
4、(*(void(*)())0)();
从3可知*(void(*)())0
是个函数,所以函数funtion();
就是函数调用;
第四题:NAND FLASH问题手搓nand_writedata函数伪代码
答案:(不知道对不对;题目太长不好描述)参考别的博主link
第五题:下图是某直流电源的输入电路,请分析图中每个元器件的作用。请问稳压管Z1可以放在保险丝F1之前吗?为什么?
答案:J3是输入插座,用于连接输入电源。VD1是防止反接的二极管,要选反向击穿电压大,正向导通电流大,导通压降小的整流二极管,比如肖特基势垒整流二极管。F1是限流的保险丝,最好选择有可恢复的,比如自恢复PTC保险丝。C104、C107是0.1uF的滤波电容,和L8一起组成一个n型滤波电路,滤除高频噪声。L8是60欧@10OMHz的磁珠,用于滤除高频干扰,同时起到一定的限流作用。E18是22uF的B型铜电容,用于滤除电源中的低频噪声。Z1是18V/0.5W的稳压二极管,防止输出电压大于18V。
Z1不能放在F1之前,因为大多数稳压二极管失效之后是短路状态,这样输入电压VDC_IN经过VD1被短路到地,没有起到保护输入电压的作用。