Wat is een reeks hexadecimale cijfers?

Nu de vraag wordt beantwoord, zal ik mijn oplossing plaatsen met behulp van de hulp die ik van iedereen hier heb gekregen (bedankt!)

Het belangrijkste ding dat ik niet leuk vind, is ervan uitgaande dat elke ingang eindigt in ‘\ n’, alleen omdat mijn Linux-terminal doet! Ook moet er een meer elegante manier zijn om A-F / A-F naar decimaal te converteren, misschien met behulp van een helperfunctie die ik mezelf schrijft (geen toegang heeft tot eventuele functies, behalve POW en PrintF)!

Ik doe K & AMP; R DE C-programmeringstaal, Oefening 2.3:

“Schrijf een functie, HTOI (s), die een reeks hexadecimale cijfers (inclusief een optionele 0x of 0x) omzet in zijn equivalente getal-waarde. De toegestane cijfers zijn 0 door 9, A via F, en A via f. “

#include <stdio.h>
#include <math.h>
#define MAXLEN 1000                                /* maximum accepted user input is 999 digits */
int htoi( char s[], int maxPower ) ;               /* maxPower will be two less than string length (len - 2) because the exponentiation is 0-indexed                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                                   *  remove the length values which represent '\n' and '\0' in user input                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                   *  if the string begins with "0x" or "0X", we remove two more from the power variable inside the htoi() body. */
int main( void )
{
  int c, i ;
  int len ;                                        /* tracks length of hexString, used to determine exponent value */
  char hexString[ MAXLEN ] ;
  len = 0 ;
  for ( i = 0 ; i < MAXLEN - 1 && ( c = getchar() ) != EOF ; ++i ) {
    hexString[i] = c ;
    ++len ;
  }
  hexString[len] = '\0' ;                          /* value of len is one more than termination value of i in above loop */
  printf( "Hex String: %s\nInt: %d\n", hexString, htoi( hexString, len - 2 ) ) ;
  return 0 ;
}
int htoi( char s[], int power )
{
  int j, i, n, decimal ;
  n = 0 ;
  if ( s[0] == '0' && ( s[1] == 'x' || s[1] == 'X' ) ) {  /* cutting off first two array values if string begins with 0x or 0X */
      j = 0 ;
      while ( ( s[j] = s[j + 2] ) != '\0' ) {
        ++j ;
      }
      power = power - 2 ;                                 /* maximum exponent value now represents the usable data */
    }
    for ( i = 0 ; s[i] != '\n' && s[i] != '\0' ; ++i ) {
      if ( s[i] >= '0' && s[i] <= '9' ) {
        decimal = s[i] - '0' ;
        n = ( decimal * pow( 16, power ) ) + n ;
        --power ;
      } else if ( s[i] == 'A' || s[i] == 'a' ) {
        decimal = 10 ;
        n = ( decimal * pow( 16, power ) ) + n ;
        --power ;
      } else if ( s[i] == 'B' || s[i] == 'b' ) {
        decimal = 11 ;
        n = ( decimal * pow( 16, power ) ) + n ;
        --power ;
      } else if ( s[i] == 'C' || s[i] == 'c' ) {
        decimal = 12 ;
        n = ( decimal * pow( 16, power ) ) + n ;
        --power ;
      } else if ( s[i] == 'D' || s[i] == 'd' ) {
        decimal = 13 ;
        n = ( decimal * pow( 16, power ) ) + n ;
        --power ;
      } else if ( s[i] == 'E' || s[i] == 'e' ) {
        decimal = 14 ;
        n = ( decimal * pow( 16, power ) ) + n ;
        --power ;
      } else if ( s[i] == 'F' || s[i] == 'f' ) {
        decimal = 15 ;
        n = ( decimal * pow( 16, power ) ) + n ;
        --power ;
      } else {
        printf( "ERROR 69:\nInput string was not hexidecimal (0-9, A-F, a-f)\nResult is 0!\n" ) ;
        n = 0;
        return n;
      }
    }
    return n ;
}

Antwoord 1, Autoriteit 100%

Wat is bedoeld, is een string zoals ab0c5342F . In C-termen:

char s[] = "AB0C5342F";

Antwoord 2, Autoriteit 33%

Tekens zijn weergegeven als ASCII en ze zijn 1 byte lang, een byte kan worden vertegenwoordigd met 2 cijfers in hexadecimale indeling, bijvoorbeeld 255 is 0xff. Wat u moet doen is transformeren van hexa naar charchants en vervolgens uw string bouwen.

Onthoud dat je het volgende kunt doen om de ascii van een personage op te halen:
int a = ‘a’


Antwoord 3, autoriteit 33%

Met een reeks hexadecimale cijfers bedoelen ze een combinatie van de cijfers 0-9 en de tekens A-F, net zoals een binaire reeks een combinatie is van nullen en enen.
Bijv.: “245FC” is een hexadecimale tekenreeks.

Other episodes