Avatar billede nexus-6 Nybegynder
15. september 2004 - 14:45 Der er 12 kommentarer

Et par små problemer

Har lige gang i et par små opgaver og er løbet ind i lidt problemer.

1) Skal lave en funktion der udskriver af hver byte i en int.
Her er så hvad jeg er kommet frem til.
void dispHex(int tal){
    char* p;
    p = (char*)&tal;
    printf("%x\n%x\n%x\n%x\n", *p, *(p+1), *(p+2), *(p+3));
}
Smider jeg 8875 in som i hex er 22AB udskriver den:
ffffffAB
22
0
0

Hvor kommer de f'er fra ?? En bytes representeres jo kun af 2 hex tal.

2) Består i at vende rundt på bytes'ne inde i en int, således at msb bliver lsb osv. Her hvad jeg kom op med, men det virker slet ikke :(
void swapBytes(int tal){
    char temp;
    char* p;
    p = (char*)&tal;
   
    temp = *(p+3);
    *(p+3) = *p;
    *p = temp;
    temp = *(p+2);
    *(p+2) = *(p+1);
    *(p+1) = temp;
}

På forhånd tak for hjælpen.
Avatar billede erikjacobsen Ekspert
15. september 2004 - 14:51 #1
AB er negativ, hvis den regnes med fortegn:

void dispHex(int tal){
    unsigned char* p;
    p = (unsigned char*)&tal;
    printf("%x\n%x\n%x\n%x\n", *p, *(p+1), *(p+2), *(p+3));
}
Avatar billede erikjacobsen Ekspert
15. september 2004 - 14:52 #2
Prøv
  int swapBytes(int tal){

og så til sidst

    return tal;

Og brug returværdien. Du overfører "int tal" som value, dvs. som en kopi.
Avatar billede arne_v Ekspert
15. september 2004 - 14:54 #3
bare %X -> %02X burde være nok
Avatar billede nexus-6 Nybegynder
15. september 2004 - 15:02 #4
unsigned eller %02X hjælper ikke :( Den udskriver stadig de F'er
Avatar billede erikjacobsen Ekspert
15. september 2004 - 15:04 #5
unsigned hjælper nu hos mig.
Avatar billede nexus-6 Nybegynder
15. september 2004 - 15:06 #6
hmm.. det var da lige godt satans.
Fik swapBytes til at virke, men de f'er vil bare ikke vaek :(
Avatar billede erikjacobsen Ekspert
15. september 2004 - 15:08 #7
Du skriver "unsigned" to steder? Hvilken C-oversætter bruger du?
Avatar billede nexus-6 Nybegynder
15. september 2004 - 15:09 #8
Sry.. havde glemt at unsigne det ene sted. Nu virker det.. Takker for hjælpen. Smid et svar for point.
Avatar billede nexus-6 Nybegynder
15. september 2004 - 15:14 #9
Men stadig.. hvorfor er det lige præcist at den vælger at udskrive en masse f'er bare fordi bits/byts er negeret ? Der er jo alligevel kun plads til 2 hex tal.
Avatar billede nexus-6 Nybegynder
15. september 2004 - 15:15 #10
edit: negeret = negativ
Avatar billede erikjacobsen Ekspert
15. september 2004 - 15:19 #11
%x udskriver ints.

Men tak, jeg samler ikke på point.
Avatar billede segmose Nybegynder
15. september 2004 - 16:03 #12
der laves en implicit konvertering fra unsigned char til int, herunder fortegnsforlængelse, AB (10101011) fortegns forlænges da det nu betragtes som en int og fortegnet er den mest betydende bit (MSB), 1 betyder at det er negativt så der indsættes 24 1'er som er FFFFFF efterfulgt af AB. Havde tallet ikke haft et 1 i MSB men et 0 som 7B ville have haft, havde 0 blivet sat ind på alle foranstående positioner.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester