ddtoul_t :: ddtoul_t( char const *dotted ) : netOrder_( 0 ), hostOrder_( 0 ), worked_( true ) { // // build in network order, then convert // unsigned char byteId = 0 ; unsigned char *netBytes = (unsigned char *)&netOrder_ ; for( ; ( byteId < 4 ) && ( worked_ ) ; byteId++, netBytes++ ) { unsigned long byteValue = 0 ; while( worked_ ) { char const dig = *dotted++ ; if( ( '0' <= dig ) && ( '9' >= dig ) ) { byteValue *= 10 ; byteValue += ( dig - '0' ); } else if( '\0' == dig ) { worked_ = ( 3 == byteId ); break; } else if( '.' == dig ) { worked_ = ( 3 > byteId ); break; } else worked_ = false ; } // process segment if( worked_ ) { worked_ = ( byteValue < 256 ); if( worked_ ) *netBytes = (unsigned char)byteValue ; } } // for each byte if( worked_ ) { hostOrder_ = networkToHost( netOrder_ ); } else { netOrder_ = 0 ; } }
uint32_t hostToNetwork(uint32_t value) { return networkToHost(value); }