结构体中的字节转换问题
void *__constant_c_and_count_memset(void *s, unsigned long pattern,
246 size_t count)
247 {
248 switch (count) {
249 case 0:
250 return s;
251 case 1:
252 *(unsigned char *)s = pattern & 0xff;
253 return s;
254 case 2:
255 *(unsigned short *)s = pattern & 0xffff;
256 return s;
257 case 3:
258 *(unsigned short *)s = pattern & 0xffff;
259 *((unsigned char *)s + 2) = pattern & 0xff;
260 return s;
261 case 4:
262 *(unsigned long *)s = pattern;
263 return s;
264 }
我想问的是,在case3的时候,那句是如何理解的,它的目标是要把这个弄成是3个字节的数据,那它那样做的作用是什么???
[解决办法]
指针加1,代表地址增加其所指向的类型在内存中占得字节数,
[解决办法]
这段代码是根据传进来的count参数值来决定参数pattern需要写入到s所指向内存里的字节数.
如pattern = 0x12345678.(unsigned long型, 假设sizeof(unsigned long)=4),
case为1时,将pattern将最低字节上的内容复制到s中, 调用函数后,
*(unsigned char *)s=0x78;
case为2时,将pattern将最低两个字节上的内容复制到s中, 调用函数后,
*(unsigned short *)s=0x5678;
case为3时,将pattern将最低两个字节上的内容复制到s中, 调用函数后,
*(unsigned short *)s=0x5678;
*((unsigned char *)s + 2)=0x34.
如果s所指向的地址原先已经清零的情况下,*(unsigned long *)s=0x345678.
void *__constant_c_and_count_memset(void *s, unsigned long pattern,size_t count){ switch (count) { case 0: return s; case 1: *(unsigned char *)s = pattern & 0xff; return s; case 2: *(unsigned short *)s = pattern & 0xffff; return s; case 3: *(unsigned short *)s = pattern & 0xffff; *((unsigned char *)s + 2) = pattern & 0xff; return s; case 4: *(unsigned long *)s = pattern; return s;}
[解决办法]