?? netutil.c
字號:
/* Network utility functions for 'TCP/IP Lean' (c) Iosoft Ltd. 2000 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "ethernet.h"
#include "netutil.h"
#define MACLEN 6
#define BCASTADDR 0xff,0xff,0xff,0xff,0xff,0xff // broadcast address
BYTE bcast[MACLEN]={BCASTADDR};
/* Convert IP address into a string */
char *ipstr(LWORD ip, char *s)
{
sprintf(s, "%lu.%lu.%lu.%lu",(ip>>24)&255,(ip>>16)&255,(ip>>8)&255,ip&255);
return(s);
}
/* Convert Ethernet address into a string (max 17 chars plus null) */
char *ethstr(BYTE *addr, char *str)
{
int i;
char *s=str;
if (!memcmp(addr, bcast, MACLEN))
strcpy(s, "----BROADCAST----");
else for (i=0; i<MACLEN; i++)
s += sprintf(s, i>0 ? ":%02x" : "%02x", *addr++);
return(str);
}
/* Convert string to IP addr: first digits form most-significant byte */
LWORD atoip(char *str)
{
LWORD ip=0L;
int i=4, n;
char c=1;
while (--i>=0 && c)
{
n = 0;
while (isdigit(c=*str++))
n = n*10 + c-'0';
ip += (LWORD)n << (i*8);
}
return(ip);
}
/* Check the given token is at the start of the string
** Return pointer to the first char after the token, 0 if token not found */
char *skiptoken(char *str, char *tok)
{
int n;
char *s=0;
n = strlen(tok);
if (n>0 && str && !strncmp(str, tok, n))
s = str + n;
return(s);
}
/* Return a pointer to the first char after any whitespace */
char *skipspace(char *str)
{
while (isspace(*str))
str++;
return(str);
}
/* Return a pointer to the first char after any whitespace or punctuation */
char *skippunct(char *str)
{
while (isspace(*str) || ispunct(*str))
str++;
return(str);
}
/* Check whether a sequence value lies within two others, return 0 if not */
int in_limits(LWORD val, LWORD lo, LWORD hi)
{
long lodiff, hidiff;
lodiff = val - lo;
hidiff = hi - val;
return(lodiff>=0 && hidiff>=0);
}
/* Print a hex dump of a buffer */
void hexdump(BYTE *buff, WORD len)
{
BYTE c, str[17];
WORD j, n=0;
while (n < len) /* For each line of 16 bytes... */
{
printf(" %04x:", n);
for (j=0; j<16; j++) /* For each byte of 16... */
{
printf("%c", j==8 ? '-':' '); /* Put '-' after 8 bytes */
if (n++ >= len) /* If no bytes left... */
{
printf(" "); /* Fill out space */
str[j] = 0;
}
else /* If bytes left... */
{
printf("%02x", c = *buff++);/* Print byte value */
str[j] = c>=' '&&c<='~' ? c : '.';
} /* Save char if valid */
}
str[j] = 0; /* Print char string */
printf(" %s\n", str);
}
}
/* EOF */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -