今天跟Derek大哥讨论一道题,从一个DWORD里面提取后面三个char值。要求是,不能用汇编。我第一时间想到的是,memcpy()。然而,这仅仅是一个指针就能解决的问题。由于交叉存储,只需:
DWORD m;
char* pm;
pm=(char*)&m;
char a[3];
a[1]=*pm;
a[2]=*(++pm);
pm++;
a[0]=*(++pm);
其实,memcpy只是一个额外的函数调用,内部工作机制是相同的。
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
这给我了n多的启示,在c++时代,人们都已经习惯了调用别人的函数,很少自己写算法了,这个习惯使我在不用汇编的情况下变得迟钝了很多,远离系统底层。我对内存结构,汇编等等还算是有些了解的,这些不应该不知道啊?!我们离那个底层透明的时代,真的是太远了,汗汗。