H******7 发帖数: 1728 | 1 怎么是最portable的方法操作integer最高位的那个byte,比如设1 |
z*s 发帖数: 209 | |
x***y 发帖数: 633 | 3 int i=1;
int target;
char * p = NULL;
if((char&)i==1)) {//little endian
p = (char *) & target + sizeof(int)-1;
}
else{ //big endian
p = (char *) ⌖
}
//then p will point to highest byte of the integer target
【在 H******7 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 怎么是最portable的方法操作integer最高位的那个byte,比如设1
|
e***l 发帖数: 710 | |
H******7 发帖数: 1728 | 5 if((char&)i==1))
可以解释下这句为什么能判断出little endian 么?谢谢
【在 x***y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : int i=1; : int target; : char * p = NULL; : if((char&)i==1)) {//little endian : p = (char *) & target + sizeof(int)-1; : : } : else{ //big endian : p = (char *) ⌖ : }
|
H******7 发帖数: 1728 | 6 还有:
p = (char *) & target + sizeof(int)-1;
这句话看着有点奇怪? 后面加上 sizeof(int) -1 是在做什么?
恕我愚钝 不太明白。请指点。 |
l*****a 发帖数: 559 | 7 As far as I can remember, we can use short array of size two and cast it to
an int to determine big endian or small endian. |
x***y 发帖数: 633 | 8 (char&)i means that you treat the variable i as the char type (not convert,
but give the compiler a different idea about i). It's equal to
*(char*)&i, which is the value of the first byte(lowest memory); So, if it's
little endian, this byte should be 1.
【在 H******7 的大作中提到】![](/moin_static193/solenoid/img/up.png) : if((char&)i==1)) : 可以解释下这句为什么能判断出little endian 么?谢谢
|
x***y 发帖数: 633 | 9 Because (char*)&target is the pointer pointing the lowest memory, and if it'
s little endian, the highest byte should be sizeof(int)-1 bytes after this
pointer.
【在 H******7 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 还有: : p = (char *) & target + sizeof(int)-1; : 这句话看着有点奇怪? 后面加上 sizeof(int) -1 是在做什么? : 恕我愚钝 不太明白。请指点。
|
H******7 发帖数: 1728 | 10 yeah~ really thank you! your explanation is so clear. I get it all. thanks
it'
【在 x***y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : Because (char*)&target is the pointer pointing the lowest memory, and if it' : s little endian, the highest byte should be sizeof(int)-1 bytes after this : pointer.
|
p******x 发帖数: 691 | 11 int i;
unsigned char *iPointer;
iPointer = (unsigned char *) &i;
Then you can use iPointer[3]
【在 H******7 的大作中提到】![](/moin_static193/solenoid/img/up.png) : yeah~ really thank you! your explanation is so clear. I get it all. thanks : : it'
|
r*********s 发帖数: 2157 | 12 同意 little endian的
但是在big endian时候, 指向的好像不是最高位
【在 x***y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : int i=1; : int target; : char * p = NULL; : if((char&)i==1)) {//little endian : p = (char *) & target + sizeof(int)-1; : : } : else{ //big endian : p = (char *) ⌖ : }
|