为什么能将uint16 x赋给uint8 数组的值啊???

时间:2022-11-26 16:24:14
为什么能将uint16 x赋给uint8 数组的值啊???在cc[1]='x';这句里。


#define uint8 unsigned char
#define uint16 unsigned short int
code uint8 aa[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};


void bb(uint16 x)//将短整数按十六进制发送
{
uint8 i;
uint8 cc[7];
cc[6]=0;
cc[0]='0';
cc[1]='x';
for(i=5;i>=2;i--) //将整数转换为4个字节的HEX值
{
cc[i]=aa[(x&0xf)];
x>>=4;
}

}

4 个解决方案

#1


计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

#2


该回复于2013-11-14 17:18:32被管理员删除

#3


'x'本质上就是一个8位的ASCII码,当然可以赋值。

引用 楼主 yehh2007 的回复:
为什么能将uint16 x赋给uint8 数组的值啊???在cc[1]='x';这句里。


#define uint8 unsigned char
#define uint16 unsigned short int
code uint8 aa[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};


void bb(uint16 x)//将短整数按十六进制发送
{
uint8 i;
uint8 cc[7];
cc[6]=0;
cc[0]='0';
cc[1]='x';
for(i=5;i>=2;i--) //将整数转换为4个字节的HEX值
{
cc[i]=aa[(x&0xf)];
x>>=4;
}

}

#4


16位存到8位上,进程拆分

uint16 x;
uint8 y[2];
y[0] = x%16;
y[1] = x/16;

#1


计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

#2


该回复于2013-11-14 17:18:32被管理员删除

#3


'x'本质上就是一个8位的ASCII码,当然可以赋值。

引用 楼主 yehh2007 的回复:
为什么能将uint16 x赋给uint8 数组的值啊???在cc[1]='x';这句里。


#define uint8 unsigned char
#define uint16 unsigned short int
code uint8 aa[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};


void bb(uint16 x)//将短整数按十六进制发送
{
uint8 i;
uint8 cc[7];
cc[6]=0;
cc[0]='0';
cc[1]='x';
for(i=5;i>=2;i--) //将整数转换为4个字节的HEX值
{
cc[i]=aa[(x&0xf)];
x>>=4;
}

}

#4


16位存到8位上,进程拆分

uint16 x;
uint8 y[2];
y[0] = x%16;
y[1] = x/16;