c语言中关于unsigned char和typedef定义类型的问题
unsigned char a[16];
另一个程序中有这样
typedef unsigned long INT32U;
INT32U b[4];
一个字符型一个整型,但是它们的数据都是128bit,如果想让a的16进制表示都传给b,应该怎么传?
就是想让b[0]的值刚好是a[0]a[1]a[2]a[3]连起来(都是16进制),以此类推,c能实现么? 展开
写了一段 你看是否合用
附图:计算结果
前4行结果是计算EFGH的结果示例,即程序原理
main()
{
int i;
unsigned char a[16]="ABCDEFGHIJKLMNO";
typedef unsigned long INT32U;
INT32U A[4],b[4];
/*计算示例段*/
A[0]=0x696A6B6C;
A[1]=0x69*0x1000000+0x6A*0x10000+0x100*0x6B+0x6C;
A[2]=(long)105*0x1000000+(long)106*0x10000+(long)107*0x100+(long)108;
printf("Example:%lx\n",A[0]);
printf("%li\n%li\n%li\n\n",A[0],A[1],A[2]);
/*计算示例段*/
for(i=0;i<=3;i++){
b[i]=(long)a[0+i*4]*0x1000000+(long)a[1+i*4]*0x10000+(long)a[2+i*4]*0x100+(long)a[3+i*4];
printf("b[%i]=%\li\n",i,b[i]);}
A[1]=0x65*0x1000000+0x66*0x10000+0x100*0x67+0x68;
printf("%li\n",A[1]);
getch();
}
计算结果
unsigned char a[16];
是定义一个 字符数组a, 长度16; 占用字节: 16
typedef unsigned long INT32U;
是将 无符号长整形声明为类型 INT32U;
INT32U b[4];
实际等于 unsigned long b[4]
声明了一个 无符号长整型数组 b, 个数: 4, 实际占用字节: 4*4 (在64位系统可能是 4*8);
这个直接内存拷贝即可. 因为正好长度一致~~
memcpy(dest,src,length)
void *memcpy(void *dest, const void *src, size_t n);
编辑本段功能
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
memcpy(b,a,16);
也可以定义另外一个char *pb=(char *) &b[0];
将b转换为char *数组,然后你想对pb一个个赋值都可以的