keil4 c51中如何将 32位整型数 如0xABCDEFAB 转化为数组
如:0xABCDEFAB10101011110011011110111110101011转化为数组word[32]={w40=1,w39=0,w38=1,w37=0,w3...
如:
0xABCDEFAB
1010 1011 1100 1101 1110 1111 1010 1011
转化为数组
word[32]={w40=1,w39=0,w38=1,w37=0,w36=1,w35=0,w34=1,w33=1,
....................................w9=1}
主要就是用在AD9850 串口方式的 控制字写入
控制字是一个32位整型量。
串行写入需要 分别写每一位进去。
分数不是问题 能帮我解决就行。
我见过一些例程是采用移位的方法,但是我看不明白。
用起来也出不了信号。 展开
0xABCDEFAB
1010 1011 1100 1101 1110 1111 1010 1011
转化为数组
word[32]={w40=1,w39=0,w38=1,w37=0,w36=1,w35=0,w34=1,w33=1,
....................................w9=1}
主要就是用在AD9850 串口方式的 控制字写入
控制字是一个32位整型量。
串行写入需要 分别写每一位进去。
分数不是问题 能帮我解决就行。
我见过一些例程是采用移位的方法,但是我看不明白。
用起来也出不了信号。 展开
4个回答
展开全部
分享一种编程的思想,建议采用移位的形式进行判断。
如原始变量 INT32_Temp = 0xABCDEFAB;
要用第0位的话,取值等于 ((INT32_Temp >>0) & 0x0001) 右移,然后取最右边的一位
依次类推,如果取值第N位, ((INT32_Temp >>N) & 0x0001)
具体的代码请自行编写 :)
如原始变量 INT32_Temp = 0xABCDEFAB;
要用第0位的话,取值等于 ((INT32_Temp >>0) & 0x0001) 右移,然后取最右边的一位
依次类推,如果取值第N位, ((INT32_Temp >>N) & 0x0001)
具体的代码请自行编写 :)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先,C51并不原生支持位数组。
其次,用标准C的方式,效率会很低。51平台有位寻址方式。
另外,不明白你为什么要转换为word型,进一步降低了效率。
你不妨先描述一下要实现的目的。
其次,用标准C的方式,效率会很低。51平台有位寻址方式。
另外,不明白你为什么要转换为word型,进一步降低了效率。
你不妨先描述一下要实现的目的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <reg52.h>
#define uchar unsigned char
typedef union l_32 //定义共用体
{
unsigned long int long_32;
struct b_32
{
uchar b00:1; //位域
uchar b01:1;
uchar b02:1;
uchar b03:1;
uchar b04:1;
uchar b05:1;
uchar b06:1;
uchar b07:1;
uchar b08:1;
uchar b09:1;
uchar b10:1;
uchar b11:1;
uchar b12:1;
uchar b13:1;
uchar b14:1;
uchar b15:1;
uchar b16:1;
uchar b17:1;
uchar b18:1;
uchar b19:1;
uchar b20:1;
uchar b21:1;
uchar b22:1;
uchar b23:1;
uchar b24:1;
uchar b25:1;
uchar b26:1;
uchar b27:1;
uchar b28:1;
uchar b29:1;
uchar b30:1;
uchar b31:1;
}bit_32;
}ulongs;
uchar word[32];
ulongs kk; //定义一个32位的变量
void main(void)
{
kk.long_32 = 0xABCDEFAB; //对32位赋值
word[0] = kk.bit_32.b00; //变量kk的最低位赋给数组第1个元素
word[1] = kk.bit_32.b01; //变量kk的第二位赋给数组第2个元素
//同理可以对任意一个数组元素赋值
}
望采纳
#define uchar unsigned char
typedef union l_32 //定义共用体
{
unsigned long int long_32;
struct b_32
{
uchar b00:1; //位域
uchar b01:1;
uchar b02:1;
uchar b03:1;
uchar b04:1;
uchar b05:1;
uchar b06:1;
uchar b07:1;
uchar b08:1;
uchar b09:1;
uchar b10:1;
uchar b11:1;
uchar b12:1;
uchar b13:1;
uchar b14:1;
uchar b15:1;
uchar b16:1;
uchar b17:1;
uchar b18:1;
uchar b19:1;
uchar b20:1;
uchar b21:1;
uchar b22:1;
uchar b23:1;
uchar b24:1;
uchar b25:1;
uchar b26:1;
uchar b27:1;
uchar b28:1;
uchar b29:1;
uchar b30:1;
uchar b31:1;
}bit_32;
}ulongs;
uchar word[32];
ulongs kk; //定义一个32位的变量
void main(void)
{
kk.long_32 = 0xABCDEFAB; //对32位赋值
word[0] = kk.bit_32.b00; //变量kk的最低位赋给数组第1个元素
word[1] = kk.bit_32.b01; //变量kk的第二位赋给数组第2个元素
//同理可以对任意一个数组元素赋值
}
望采纳
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
main(){
unsigned long hex=0xABCDEFAB
unsigned char word[32],i;
for (i=31;i>=0;i--)
{
word[i]=hex&0x1;
hex=hex>>1;
}
}
unsigned long hex=0xABCDEFAB
unsigned char word[32],i;
for (i=31;i>=0;i--)
{
word[i]=hex&0x1;
hex=hex>>1;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询