永发信息网

把字节型指针转换成整型指针时,如何保证4字节对齐?

答案:2  悬赏:80  手机版
解决时间 2021-04-04 21:46
把字节型指针转换成整型指针时,如何保证4字节对齐?
最佳答案
字节型指针指向多少就是多少,没办法对齐的啊
比如这样一块内存:
0x12340000 41 42 43 44 45 46 47 48
0x12340008 49 4a 4b 4c 4d 4e 4f 00
若char* p = (char*) 0x12340000; 即p代表"ABCDEFGHIJKLMNO"
现在令 char* p2 = p1 + 7; 即 0x12340007
那么 int* p3 = (int*) p2; 的话,则使用 *p3 访问内存会造成效率低下或者出错(如果操作系统事先没有设置让它自动多次读取以获取非对齐数据的话,甚至会直接出错)
那么你要做的事情是什么?要让p3的值是 0x12340004吗?

int* p3 = (int*) ((unsigned int)p2 & ~3); //最后两位中所有的1都抹掉
这样p3就是0x12340004了追答
追问:非常感谢您的回答!
这正是我想做的事! 但是我的编译环境比较特殊,不支持指针转换成整型,有什么方法可以绕过这一步呢?
追答:那就指针转指针吧。
char* p2 = ...(一个非对齐的指针)
int* p3 = (int*) p2;
int* p4 = (int*)&p3;
*p4 &= ~3;
然后p3就对齐了
追问:为什么不直接 p3 &= ~3 呢?
追答:我记得指针类型不让你用~运算的吧?
追问:int* p4 = (int*)&p3; 这一步就相当于做了一个强制转换吧?指针转指针。我去试试,谢谢高人指点!
追答:因为&p3类型是int**,二级指针。要把里面的内容当作int操作就必须要先转一级指针
全部回答
如果你只是想把字节型指针指向的地址取4个字节出来当整型用,那就不用4字节对齐,直接强制类型转换就可以了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我的电脑的每一个图表下面都有一条下划线,怎
形容女人有智慧的语录,用什么诗能形容一个美
化学中,品红在静置的水中会扩散,静置是什么
1-7七个数字不重复,一共可以组成多少种组合
网名,女生叫"相忘 濡以沫",求对仗工整,有出处
三国之刃天书怎么获得 南征北战系统详解
怎么别人梦幻西游171可以把技能点180
身体燥热吃写什么食物好降火
兽药公司排行榜那家最好
手机如何调整旋转屏幕,苹果5s手机屏幕颜色怎
钉钉能二十四小时监控位置吗
男朋友去越南上班,
书面表达(满分25分)下列四幅图描述了小学生
表达隐退深山的诗句,形容深山的诗句
会声会影两个视频同框但是播放一个快一个慢怎
推荐资讯
四川高2019级考生须复读怎么办?
出征前必打胜仗的诗句,关于打仗的诗句
表示学生好心情的名言,求形容学生的诗词句
银行开出的五年期借款保函可以提前兑付吗?
本人原在事业单位在编人员,现巳辞退,己交养老
find me in the pacific我想跟它很配的一句英
what fruit is on a cent
新枕头太高怎么办?
女生去男同学家借宿不行吗
求米洛的目标系列1-9(全)和她的其他文~有的
科尔沁长调民歌有哪些?
小泰迪感冒输液四天还是不好怎么办
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?