hmm... wenn du ohnehin den ganzen barcode in ein array packst, dann sollte es doch auch möglich sein, bei falschrum gelesenem barcode das array umzudrehen. ich nehme mal an, dass du das array aus unsigned chars baust, ansonsten entsprechend ändern. ich nenne das array daten[]. auch die länge des arrays ("laenge") sollte bekannt sein. folgendes sollte dann helfen, das array umzudrehen, dann nochmal auswerteversuch starten:
Code:
void umdrehen(void){
   int i;
   unsigned char tausch;
   for(i=0;i<laenge/2;++i){
      tausch = daten[i];
      daten[i] = daten[laenge-i-1]; //die -1 nicht vergessen! 
      daten[laenge-i] = tausch;
   }
}
der zweck: bis zur hälfte des arrays werden die werte mit dem entsprechenden gegenstück vertauscht (dreieckstausch). der zweck der minus 1: in einem zehner-array würde wenn i=0 ist, das nullte mit dem 10-0-1, also dem 9. und somit letzten element vertauscht werden. wäre die -1 nicht da, würde das ärger geben, es gibt ja kein 10tes element.