2012-11-25 25 views
7

ich einen char Zeiger auf ein unsigned char var konvertieren wollen, ich dachte ich, dass mit nur Gießen tun könnte, aber es funktioniert nicht:konvertieren char Zeiger auf unsigned char-Array

char * pch2; 
//Code that puts something in pc2 
part1 = (unsigned char) pch2; 

Ich habe die Code hierzu:

result.part1 = (unsigned char *) pch2; 
printf("STRUCT %s\n",result.part1); 

Ergebnis ist nur eine Struktur mit unsignierten Char-Arrays.

EDIT:

  pch2 = strtok(ip, "."); 

      while(pch2 != NULL){ 
       printf("x %d x: %s\n", i, pch2); 
       pch2[size-1] = '\0'; 

       if(i == 1) 
        result.part1 = (unsigned char *) pch2; 
       if(i == 2) 
        result.part2 = (unsigned char *) pch2; 
       if(i == 3) 
        result.part3 = (unsigned char *) pch2; 
       if(i == 4) 
        result.part4 = (unsigned char *) pch2; 
       i++; 
       pch2 = strtok (NULL,"."); 
      } 
      printf("STRUCT %c\n",result.part1); 

Struct:

typedef struct 
{ 
    unsigned char part1; 
    unsigned char part2; 
    unsigned char part3; 
    unsigned char part4; 
} res; 
+2

In Ihrem Titel fragen Sie nach einem Array, in Ihrem Text nach einer Variablen und die meisten Antworten zeigen Ihnen, wie Sie einen Zeiger auf unsigned char erhalten. Welches ist es? – dmckee

+0

Ich habe einen Zeiger, den ich in ein Zeichenfeld ohne Vorzeichen konvertieren möchte? – user1007522

Antwort

3

Sie unsigned char werfen nicht unsigned char* Sie vergessen haben, die *

part1 = (unsigned char*) pch2; 

wenn pch2 nicht null wird das Programm zum Absturz beendet wird, Wenn du Glück hast Wenn Sie strlen verwenden, so müssen Sie es null beenden, bevor pch2 mit Druck, versuchen Sie stattdessen:

pch2[size-1] = '\0'; /* note single quote */ 
result.part1 = (unsigned char *) pch2; 

Update: definieren Sie Ihre Struktur wie folgt:

typedef struct 
{ 
    const char *part1; 
    const char *part2 
    const char *part3; 
    const char *part4; 
} res; 

Und es zuweisen, ohne bei allen Gießen:

result.part1 = pch2; 
+0

Wenn das Programm wie eine Zeichenfolge ausgedruckt wird, wird das Programm nicht mehr ausgeführt? – user1007522

+0

@ user1007522 C-Strings sollten Null terminierte Strings von 'char' nicht unsigned Zeichen sein, was versuchst du genau zu tun? – iabdalkader

+0

@ user1007522: Sie können ein einzelnes Zeichen mit '% c' drucken. Zum Beispiel: 'printf (" STRUCT% c \ n ", * result.part1);' –

1

Sie wollen, dies zu tun:

part1 = (unsigned char*) pch2; 

Statt:

part1 = (unsigned char) pch2; 
1

Probieren Sie etwas wie folgt aus: -

char *ph2; 
unsigned char *new_pointer = (unsigned char*) ph2; 
+0

Ich habe das getan, aber wenn eine printf% s macht das Programm stoppt? Ist es etwas mit strtok, weil pch2 von strtok init ist? – user1007522

+0

Sie können versuchen mit printf ("STRUCT% c \ n", result.part1); –

1

ich einen char Zeiger auf ein unsigned char var

Sind konvertieren möchten Sie sicher ? Das Konvertieren von Zeiger in Char in unsigned Char wird nichts Gutes tun - der Wert wird auf 1 Byte gekürzt, und er wird sowieso bedeutungslos sein. Vielleicht möchten Sie dereferenzieren ein Zeiger und den Wert darauf hingewiesen bekommen - dann sollten Sie etwas tun:

unsigned char part1 = (unsigned char)*pch2; 

Nach dem Bearbeiten Ich sehe, dass part1 ist Array Charakter - wenn Ihr Programm stürzt ab, nachdem es verwendet wird, , füllen Sie wahrscheinlich pch2 falsch. Vielleicht hast du '\0' Terminator vergessen?

EDIT:

Sie sehen, es ist viel besser jetzt Ihre Frage, die alle erforderlichen Informationen zu beantworten. Müssen Sie strtok verwenden? Wäre das gut?

res result; 
    char* ip = "123.23.56.33"; 

    sscanf(ip, "%hhu.%hhu.%hhu.%hhu", &result.part1, &result.part2, &result.part3, &result.part4); 
+0

Ich denke, das ist näher an dem, was das OP sucht, als die Antworten bis heute, aber ich bin mir immer noch nicht sicher, ob das OP noch klar ist. – dmckee

+0

Ich habe den Code bearbeitet, ich beendete das Char-Array, wie Sie sehen, der erste Druck von pch2 funktioniert wie ein Charme. Die letzte nicht :( – user1007522

+0

Entscheidender Punkt hier ist - was mit 'pch2' gezeigt wird und wie es dort ankommt. Ohne das zu wissen, können wir nicht sagen, ob es richtig aufgebaut ist. Ihre Art, die Zeichenfolge zu beenden, ist falsch -' "\ 0 "' * definitiv * ist nicht das, was da sein sollte, und sowieso rufst du 'strlen' an einer möglicherweise inkorrekten Zeichenfolge an. Wir müssen wissen, auf welchen Wert' pch2' zeigt. – Maciek

0

Gefunden das Problem, vergaß, das Zeichen pch2 zu unsigned Int zu werfen und dann kann ich mit% u ausdrucken. Code:

unsigned int temp; 

temp = atoi(pch2); 

result.part1 = temp; 
printf("Struct: %u\n",result.part1); 

Vielen Dank für Ihre Hilfe Jungs!