Avatar billede bjering Nybegynder
06. september 2006 - 18:02 Der er 5 kommentarer og
1 løsning

Lave const u_char til unsigned long

Hejsa eksperter.

Sidder og roder med at lave en constant unsigned char til en unsigned long.

Normals når jeg skriver den ind gør jeg bare

u_long denher = "0x12345678"; // den virker self.

Men nu har jeg så f.eks 33 44 55 66 i en const_u char og skal have den til u_long som ovenfor.

den her kode virker ikke...
---------------
const u_char *recdata;
recdata = (const u_char *)&payload[2];

u_long key;
key = atol( (const char*)&recdata[1] );
Log2File(TRUE, "Key : %s, %i, %l, %.4X - a,i,l \n", key, key, key, key);

giver :

[ DATA ] (0x0000)  26 62 14 5A 1B CC F3 4E 16 DF 81 0D 00 3D 0C 00[17:57:41] Key : (null), 0, , 0000 - a,i,l

ps, er 62 14 5A 1B jeg skal have over i dette tilfælde.

så hvordan fikser jeg det så key (long) i log2file kommer til at stå :

0x62145A1B

???

Takker :)
Avatar billede arne_v Ekspert
06. september 2006 - 18:19 #1
standard:

memcpy(&key,recdata+1,sizeof(u_long));

dirty:

key = *((u_long*)(recdata+1));

evt. skal du have swappet de too yderbyte og de to inderbyte
Avatar billede arne_v Ekspert
06. september 2006 - 18:20 #2
det sidste afhænger lidt af big/little endian
Avatar billede bjering Nybegynder
06. september 2006 - 18:32 #3
smukt virker :)

og hvis jeg skal swappe dem er det

htonl
ntohl

ik ?

og smid lige et svar med det samme :)
Avatar billede arne_v Ekspert
06. september 2006 - 18:45 #4
hvis h og n er forskellig (hvilket det er på x86 maskiner)
Avatar billede arne_v Ekspert
06. september 2006 - 18:45 #5
og svar
Avatar billede arne_v Ekspert
06. september 2006 - 18:45 #6
og for en god ordens skyld: laver du "dirty" måden på en SPARC, så crasher dit
program sandsynligvis
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