由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 看到一个c的面试题,求教。
相关主题
一道基础的C类型转换面试题懂得有点晕问一个果子家的面试题,int array 强制转换成char*
问个bit struct的面试题 急菜鸟求救 请大家看看我的代码有没有问题
32bit vs 64 bitA simple interview question
问个面试时候hash table的C++实现问题问个算法题
一个CS题目,大家帮我看一下吧看一道面试题
void * 和 char * 有区别吗?大家看看这几道亚麻面试题怎么做?
问个关于排序的面试题说说某著名软件公司的onsite面试
谁给我这个non-cs的解释一下什么endian和可能的考题啊?两道面试题,请大家说说看法
相关话题的讨论汇总
话题: char话题: endian话题: int话题: byte话题: ipointer
进入JobHunting版参与讨论
1 (共1页)
H******7
发帖数: 1728
1
怎么是最portable的方法操作integer最高位的那个byte,比如设1
z*s
发帖数: 209
2
利用 sizeof(int) ?
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 的大作中提到】
: 怎么是最portable的方法操作integer最高位的那个byte,比如设1
e***l
发帖数: 710
4
移位加逻辑操作
H******7
发帖数: 1728
5
if((char&)i==1))
可以解释下这句为什么能判断出little endian 么?谢谢

【在 x***y 的大作中提到】
: 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 的大作中提到】
: 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 的大作中提到】
: 还有:
: 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 的大作中提到】
: 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 的大作中提到】
: 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 的大作中提到】
: 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 *) ⌖
: }

1 (共1页)
进入JobHunting版参与讨论
相关主题
两道面试题,请大家说说看法一个CS题目,大家帮我看一下吧
一道面试题(integer to binary string)void * 和 char * 有区别吗?
贡献一个Java 程序 面试题,看不懂为啥。请指教!问个关于排序的面试题
一道C语言题谁给我这个non-cs的解释一下什么endian和可能的考题啊?
一道基础的C类型转换面试题懂得有点晕问一个果子家的面试题,int array 强制转换成char*
问个bit struct的面试题 急菜鸟求救 请大家看看我的代码有没有问题
32bit vs 64 bitA simple interview question
问个面试时候hash table的C++实现问题问个算法题
相关话题的讨论汇总
话题: char话题: endian话题: int话题: byte话题: ipointer