unsigned char
nch_to_uch(char* nch)
{
int d = 1;
unsigned char s = 0;
while (*++nch);
while (*--nch) {
s += (unsigned char) (*nch - 48) * d;
d *= 10;
}
return s;
}
이것 좀 설명해 주시겠어요? *^_^*
-----------------------------------------------
어머니,
그 이름만으로도 우리는 풍요로와 집니다.
재미있어 보이길래
scanf나 atoi 정도라도 쓸 수 있었으면 좀 쉬우련만, 전부 다 만들어 쓰려니 좀 골치 아팠습니다;
#include <stdio.h> unsigned char nch_to_uch(char* nch) { int d = 1; unsigned char s = 0; while (*++nch); while (*--nch) { s += (unsigned char) (*nch - 48) * d; d *= 10; } return s; } void reduce_ipaddr(const char* src, unsigned char* dst) { int i, j; char buf[16] = {0, }; for (i = j = 0; src[i]; i++) { if (src[i] == '.') { buf[i] = 0; *dst++ = nch_to_uch(buf + j); j = i + 1; continue; } buf[i] = src[i]; } *dst++ = nch_to_uch(buf + j); } int main(int argc, char** argv) { const char* ipstr = "192.168.0.2"; unsigned char ip4ch[4]; reduce_ipaddr(ipstr, ip4ch); printf("%s => %02X %02X %02X %02X\n", ipstr, ip4ch[0], ip4ch[1], ip4ch[2], ip4ch[3]); return 0; }$ruby.is_a?(Object){|oriented| language} #=> true
http://rubykr.org
----
http://nohmad.tumblr.com/
다른 방법
#include <stdio.h> static void ipstr2ch(char *ipstr, unsigned char *ipch) { for(*ipch = 0; *ipstr; ipstr++) { if(*ipstr == '.') *++ipch = 0; else *ipch = *ipch * 10 + (*ipstr - '0'); } } int main(int argc, char *argv[]) { char *dstr = "192.168.0.2"; unsigned char cip[4]; ipstr2ch(dstr, cip); printf("%x %x %x %x\n", cip[0],cip[1],cip[2],cip[3]); return 0; }코드도 짧고, 변수도
코드도 짧고, 변수도 안 쓰고, 정말 멋진 방법이네요~.
$ruby.is_a?(Object){|oriented| language} #=> true
http://rubykr.org
----
http://nohmad.tumblr.com/
감사합니다.
조언해주셔서 감사합니다~~~
-----------------------------------------------
어머니,
그 이름만으로도 우리는 풍요로와 집니다.
효도합시다......
-----------------------------------------------
죄송하지만......
unsigned char
nch_to_uch(char* nch)
{
int d = 1;
unsigned char s = 0;
while (*++nch);
while (*--nch) {
s += (unsigned char) (*nch - 48) * d;
d *= 10;
}
return s;
}
이것 좀 설명해 주시겠어요? *^_^*
-----------------------------------------------
어머니,
그 이름만으로도 우리는 풍요로와 집니다.
효도합시다......
-----------------------------------------------
버그가 있군요. 다시
버그가 있군요. 다시 올립니다.
unsigned char nch_to_uch(char* nch) { int i = 0, d; unsigned char s = 0; while (*nch++) ++i; for (d = 1, *--nch; i > 0; --i) { s += (unsigned char) (*--nch - '0') * d; d *= 10; } return s; }0~255를 나타내는 n개(1~3)의 캐릭터를 1개의 unsigned char로 바꾸는 겁니다. 표준라이브러리의 atoi를 쓰면
#include <stdlib.h> unsigned char nch_to_uch(char* nch) { return (unsigned char) atoi(nch); }와 같은 결과를 만듭니다.
$ruby.is_a?(Object){|oriented| language} #=> true
http://rubykr.org
----
http://nohmad.tumblr.com/
댓글 달기