Код C для шестнадцатеричного без использования стандартных библиотек - PullRequest
1 голос
/ 11 февраля 2011

Я хочу написать C-код, который преобразует сначала строку в целое число, а затем целое число в шестнадцатеричное.Например: у меня есть Ip iddress как «172.24.18.240», теперь сначала найдите из него первую точку и возьмите число перед ним, то есть «172», преобразуйте его в целое число, затем преобразуйте в шестнадцатеричное значение inti, и оно должно сделать то же самое для всех, как 24, 18,240 и преобразовать в длинное / целое значение

любая помощь приветствуется.

Ответы [ 4 ]

0 голосов
/ 11 февраля 2011
    int i = 0, sum = 0;
    char ipString[] = "172.24.18.240";
    do
    {
            if (isdigit(ipString[i])) sum = sum * 10 + ipString[i] - '0';
            else
            {       putchar("0123456789ABCDEF"[sum / 16]);
                    putchar("0123456789ABCDEF"[sum % 16]);
                    putchar('.');
                    sum = 0;
            }
    }
    while (ipString[i++] != '\0');

Более-менее некрасиво, но должно работать на IP-адресах.

0 голосов
/ 11 февраля 2011
int main(void)
{
    char hexChars[] = "0123456789ABCDEF";
    char ipString[] = "172.24.18.254"; 
    char hexString[9] = "";
    const char* pch = ipString;

    int num = 0;
    int i = 0;
    do
    {
        if (*pch != '.' && *pch != '\0')
        {
            num *= 10;
            num += (*pch - '0');
        }
        else
        {
            hexString[i++] = hexChars[num / 16];
            hexString[i++] = hexChars[num % 16];
            num = 0;
        }
    } while (*pch++);

    return 0;
}

Шестнадцатеричные значения будут сохранены в hexString.

0 голосов
/ 11 февраля 2011
#include <stdio.h> // testing
int main(int argc, char** argv) // testing
{
    char* ipString = argc > 1? argv[1] : "172.24.18.240"; // testing
    char* ip = ipString;
    unsigned int hex;

    for( int i = 0; i < 4; i++ ){
        unsigned int n = 0;
        for( char c; (c = *ip) >= '0' && c <= '9'; ip++ )
            n = 10 * n + c - '0';
        hex = (hex << 8) + n;

        if( *ip == '.' ) ip++;
    }

     printf("%08X\n", hex); // testing
     return 0; // testing
}
0 голосов
/ 11 февраля 2011

Может как то так?

char sn[4];
char *nid = hexString;

int nip[4];
int xnip[4];
int j = 0;
while (*nid != '\0') {
  int i = 0;
  memset(sn, '\0', sizeof sn);
  while (isdigit(*nid)) {
    sn[i++] = *nid++;
  }
  if (*nid == '.')
    nid++;

  // now sn should be the number part
  nip[j] = your_str_to_int(sn);
  xnip[j] = your_int_to_hex(nip[j]);
  j++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...