[질문/커널프로그래밍] 문자형 정수인 아이피 리스트를 읽어서 16진수 정수형으로 저장할려고 합니다.

cs010101의 이미지

안녕하세요?
다름이 아니고, 문자형 정수인 아이피 리스트(ip.txt)를 읽어서 16진수 정수형으로 재저장할려고 합니다.

ip.txt 파일을 읽으면,

buf1
--------------------------------------------------------------------------------------
|1|9|2|.|1|6|8|.|0|.|1|\n|1|9|2|.|1|6|8|.|0|.|2|\n|1|9|2|.|1|6|8|.|0|.|3|\n|......
--------------------------------------------------------------------------------------
이런 식으로 들어가잖아요?

이때,
192는 16진수로 C0, 168은 16진수로 A8, 0은 16진수로 00, 1은 01 이죠.

즉, 위 버퍼의 내용을 읽어서(버퍼에는 char로 들어가 있겠죠),

buf2
---------------------------------------------------
|0x0100A8C0|0x0200A8C0|0x0300A8C|......
---------------------------------------------------

이렇게 다시 저장할려고 합니다. buf2는 int구요.

그러면 어떻게 하면 될까요? 참, buf2는 전역변수로 선언해서 다른 모듈함수에서 사용할려고 합니다.

int fd;
char buf1[1];
fd=sys_open("ip.list", O_RDONLY, 0);
if(fd>0){
while(sys_read(fd,buf1,1)>0){

...... 여기에 들어갈 내용 ......

}
sys_close(fd);

위에서 처럼 빈공간에 들어가야할 내용이거든요.

많은 분들의 도움 부탁드립니다~
(아시겠지만, 커널 프로그래밍이라서 C라이브러리 함수는 사용을 못 합니다.)

감사합니다.

bushi의 이미지

커널 프로그래밍이라서 C라이브러리 함수는 사용을 못한다는 편견은 버리세요.
glibc 를 사용하지는 못하지만 커널도 막강한 라이브러리를 가지고 있습니다.
아니, 커널 자체가 glibc 를 뛰어넘는 라이브러리입니다.
각설하고, 커널의 lib/ 디렉토리에 뭐가 들었는지 구경이나 해보세요.