请教这中间求底8位的过程!
ubuntu@XXX:~/linux_sys$ gcc get_low8bit.c
ubuntu@XXX:~/linux_sys$ ./a.out
67 0x43
----------------------------------
33 0x21
ubuntu@XXX:~/linux_sys$ cat get_low8bit.c
#include <stdlib.h>
#include <stdio.h>
#include <sys/wait.h>
int main(int argc, const char *argv[])
{
int i=0x87654321;
wait(&i);
int a=WEXITSTATUS(i);
printf("%d\t%#x\n",a,a);
//printf("%d\t%#x\n",i,i);
printf("----------------------------------\n");
printf("%d\t%#x\n",i&0xff,i&0xff);
return 0;
}
ubuntu@XXX:~/linux_sys$
由于你代码里面没有创建子进程,所以wait(&i);这一行不起任何作用,是无用的代码。
你可以用gcc -E选项将宏WEXITSTATUS展开,会发现其实在Linux下就等于int a = (i & 0xff00) >> 8
没看到有文档明确说明status参数每个字节的定义,这个字段有很大可能是平台相关的,Linux下可能返回的是倒数第二个字节,其它UNIX平台返回的可能不是倒数第二个,建议不要依赖底层实现,不然跨平台移植的时候可能会有问题。