#include <stdio.h>

void UIntToHexStr (unsigned int uiValue, char pcStr[]){
 
  unsigned char ucCharCounter;

  pcStr[0]='0';
  pcStr[1]='x';

  for(ucCharCounter=5; ucCharCounter!=1; ucCharCounter--){
    if((uiValue & 0x000F) < 10){
      pcStr[ucCharCounter]=(uiValue & 0x000F)+'0';
    }
    else{
      pcStr[ucCharCounter]=(uiValue & 0x000F) - 10 + 'A';
    }
    uiValue=uiValue>>4;
  }

  pcStr[6]=NULL;

}



enum Result {OK,ERROR};
enum Result eHexStringToUInt(char pcStr[],unsigned int *puiValue){

  unsigned char ucCharCounter;

  if(pcStr[0]!='0' || pcStr[1]!='x' || pcStr[0]!=NULL){
    return ERROR;
  }
  

  for(ucCharCounter=2; pcStr[ucCharCounter]!=NULL; ucCharCounter++){


    if(ucCharCounter>5){
      return ERROR;
    }    

    if(pcStr[ucCharCounter]>='A') {
      *puiValue=(*puiValue<<4) + (pcStr[ucCharCounter] - 'A' + 10);
    }

    else{
      *puiValue=(*puiValue<<4) + (pcStr[ucCharCounter] - '0');
    }

      
  }
  return OK;
}




void AppendUIntToString(unsigned int uiValue, char pcDestinationStr[]){

  unsigned char ucCharCounter;

  for(ucCharCounter=0; pcDestinationStr[ucCharCounter]!=NULL; ucCharCounter++){}
  UIntToHexStr(uiValue, pcDestinationStr+ucCharCounter);
}

int main(){
	unsigned int uiValue = 100;
	unsigned char pcStr[20]="";
	uIntToHexStr(uiValue, pcStr);
	int i;
	for(i=0;i<6;i++){
	printf("%c", pcStr[i]);}
 
	unsigned int elo;
	unsigned int *wsknaelo;
	wsknaelo = &elo;
	eHexStringToUInt(pcStr,&wsknaelo);
 
	printf("\ntu jest zamienona liczba %d", wsknaelo);
	return 0;
}