memcpy()之小端模式

函数原型

void memcpy(voiddestin, const void *src, size_t n);

功能

由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。

头文件

#include

返回值

函数返回一个指向dest的指针。

例1:如果用来复制字符串,输出的顺序是正常的

#include
#include
int main()
{
	char* s="1a2b3c4d";
	char ch[20];
	memcpy(ch,s,strlen(s));
 	ch[strlen(s)]='\0';//因为从d[0]开始复制,总长度为strlen(s),d[strlen(s)]置为结束符
  printf("%s",d);
  return 0;
}
//输出结果为1a2b3c4d

例2:如果用来复制整形(多字节数据),输出结果是逆向的

#include 
#include 
int main()
{
    int sh=0x1a2b3c4d;
    char ch[4];
    memcpy(ch,&sh,4);
    printf("%2x%2x%2x%2x\n",ch[0],ch[1],ch[2],ch[3]);
    return 0;
}
//输出结果为4d3c2b1a

在这里插入图片描述
其原因在于,计算机在存储整形数0x1a2b3c4d时,采用的小端模式,即低位在左,高位在右,4d为低位放在低地址,1a高位放在高地址:

地址位 0x1d9656c0 0x1d9656c1 0x1d9656c2 0x1d9656c3
数据 4d 3c 2b 1a

所以拷贝后输出顺序是反着的。而字符串的存储则是正常顺序(1a到4d从左往右依次存放),所以输出也是正常顺序。

你可能感兴趣的:(c语言)