little endian 값 읽어서 int 값으로 저장하기
일단 다음의 코드를 보시고..
#include "ext2_fs.h" #include
#include #include
#include #include
#include
int main(int argc, char **argv) {
int fd; int t;
int i,j=0;
char buf[4] = {0};
fd = open("/dev/sdf1", O_RDWR);
if( fd < 0){
perror("open error"); }
//find a inode table in GDT
t = lseek(fd, 0x400, SEEK_SET); memset(buf, 0x00, sizeof(buf)); read(fd, buf, 4);
memcpy(i, buf, 4);
j = htonl(i);
printf("i : %d\n", i); printf("buf : %02x\n", buf[0]);
printf("buf : %02x\n", buf[1]); printf("buf : %02x\n", buf[2]); printf("buf : %02x\n", buf[3]);
printf("t : %d\n", t);
close(fd); return 0;
}
일단 워닝이 있습니다만 급히 생각나서 짜던것이라..
0x400번지의 4바이트를 읽어서 int 값으로 저장해야 합니다.
그런데 이게 쉽지 않군요..
어떻게 하는게 좋을까요.. 여러 고수님의 답변 부탁드립니다.
0x400 번지에 0x000000b8 이라는 값이 있다면
저는 int i 값에 184 라는 값을 넣고 싶습니다
좋은 방법 부탁드립니다. ㅜㅜ
Re:
읽어야 하는 소스(/dev/sdf1이군요)와 코드가 실행되는 머신의 endian 이 같다면
잘 될 겁니다... 틀리다면, 읽은 후 htonl() 같은 녀석으로 한번 변환을 하면 되겠죠.
답변 감사합니다..
답변 감사합니다.. 제가 왜 int 값으로 읽는것을 생각 못했을까요 ㅜㅜ
에효..
덕분에 잠 잘 수 있겠습니다. ㅎㅎ
::::::::::: Easy come, Different go.
::::::::: Http://www.geekstep.org
::::::::::: Easy come, Different go.
::::::::: Http://www.geekstep.org
댓글 달기