fork download
  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6. char httpRequest[] = "iPAddressOctet1=192&iPAddressOctet2=168&iPAddressOctet3=0&iPAddressOctet4=220&"
  7. "subnetMaskOctet1=255&subnetMaskOctet2=255&subnetMaskOctet3=255&subnetMaskOctet4=0&defaultGatewayOctet1=192&"
  8. "defaultGatewayOctet2=168&defaultGatewayOctet3=0&defaultGatewayOctet4=1&hTTPPort=80";
  9.  
  10. struct address_t
  11. {
  12. const char * name;
  13. uint8_t octets[4];
  14. };
  15.  
  16. address_t addresses[] =
  17. {
  18. { .name = "iPAddress", .octets = { 0, 0, 0, 0 } },
  19. { .name = "subnetMask", .octets = { 0, 0, 0, 0 } },
  20. { .name = "defaultGateway", .octets = { 0, 0, 0, 0 } }
  21. };
  22.  
  23. uint16_t hTTPPort;
  24.  
  25. char * p = strtok( httpRequest, "&" );
  26. while ( p != nullptr )
  27. {
  28. bool found = false;
  29.  
  30. for ( size_t i = 0; i < sizeof( addresses ) / sizeof( addresses[0] ); i++ )
  31. {
  32. address_t * a = &addresses[i];
  33. size_t len = strlen( a->name );
  34.  
  35. if ( !strncmp( p, a->name, len ) && !strncmp( p + len, "Octet", 5 ) )
  36. {
  37. char * p2 = p + len + 5;
  38. if ( *p2 >= '1' && *p2 <= '4' && *( p2 + 1 ) == '=' )
  39. {
  40. a->octets[ *p2 - '1' ] = atoi( p2 + 2 );
  41. found = true;
  42. break;
  43. }
  44. }
  45. }
  46.  
  47. if ( !found )
  48. {
  49. size_t len = strlen( "hTTPPort" );
  50.  
  51. if ( !strncmp( p, "hTTPPort", len ) )
  52. {
  53. char * p2 = p + len;
  54. if ( *p2 == '=' )
  55. {
  56. hTTPPort = atoi( p2 + 1 );
  57. }
  58. }
  59. }
  60.  
  61. p = strtok( nullptr, "&" );
  62. }
  63.  
  64.  
  65.  
  66. for ( size_t i = 0; i < sizeof( addresses ) / sizeof( addresses[0] ); i++ )
  67. {
  68. address_t * a = &addresses[i];
  69. printf( "%s = { %hhu, %hhu, %hhu, %hhu }\n", a->name, a->octets[0], a->octets[1], a->octets[2], a->octets[3] );
  70. }
  71.  
  72. printf( "hTTPPort = %hu\n", hTTPPort );
  73.  
  74.  
  75. return 0;
  76. }
Success #stdin #stdout 0s 4948KB
stdin
Standard input is empty
stdout
iPAddress = { 192, 168, 0, 220 }
subnetMask = { 255, 255, 255, 0 }
defaultGateway = { 192, 168, 0, 1 }
hTTPPort = 80