Avatar billede centauri Nybegynder
17. november 2011 - 11:52 Der er 9 kommentarer

Skriv Hex værdi i text fil istedet for Decimal

Jeg har et lille problem har en værdi jeg skal have skrevet til en text fil men den skal skrives fom HEX og ikke som decimal tal i filen.

Hvis jeg uskriver min værdi på skærmen med følgende
printf("AgentId(Hi)=%X\n",ntohl(NImcAgt->AgentID_High));

Får jeg værdien
AgentId(Lo)=FFFF4305

Den værdi skal jeg så have skrevet ned i en text fil hvor jeg bruger følgende.

myfile << "<AgentId_Lo>" << ntohl(NImcAgt->AgentID_Low) << "</AgentId_Lo>\n";

Hvilket giver mig et output på
<AgentId_Lo1>4294918917</AgentId_Lo>

Så her er det åbenbart konverteret til Decimal tal.

Hvordan får jeg skrevet det som HEX til min Tekst fil ?

Og ville egentlig også gerne have fjernet de første 4 FFFF'er da de ikke skal bruges til noget skal kun bruge de sidste 4 cifre.
Så jeg bare ender op med værdien '4305'
Avatar billede arne_v Ekspert
17. november 2011 - 15:10 #1
%4X eller %04X vil altid give dig 4 cifre
Avatar billede arne_v Ekspert
17. november 2011 - 15:11 #2
for at faa dem i din fil kan du vaelge mellem:

A) skifte til C IO og bruge fprintf med %X
B) bruge sprintf og %X til at faa en C streng (nul termineret char array) som du kan udskrive med C++ IO
C) bruge de modifiers som faar C++ til at udskrive i hex
Avatar billede arne_v Ekspert
17. november 2011 - 15:13 #3
noget a la:

f << resetiosflags(ios::basefield) << setiosflags(ios::hex) << setw(4) << setfill('0') << val;
Avatar billede centauri Nybegynder
18. november 2011 - 10:22 #4
Hvis jeg bruger det
myfile << "<Test>" <<resetiosflags(ios::basefield) << setiosflags(ios::hex) << setw(4) << setfill('0') << ntohl(NImcAgt->AgentID_Low)  << "</Test>\n";

Så laver den alt den udskriver efter denne linje om til HEX også, og er ikke lige det jeg ønsker er kun lige den enkelte værdi her jeg ønsker at udskrive som HEX værdi.

Plus den stadig udskriver det som ffff1104 og ikke bare 1104

Går jeg noget forkert eller ?

Må lige bære lidt over med mig C++ er ikke min stærke side er van til Visual Basic.
Avatar billede centauri Nybegynder
18. november 2011 - 10:43 #5
Fandt ud af jeg kunne gøre det sådan her
myfile << "    <Test>"<< hex << ntohl(NImcAgt->AgentID_Low) << "</Test>\n";

Og bare efterfølgende bruge
myfile << "    <AgentId_Hi>" << dec << ntohl(NImcAgt->AgentID_High) << "</AgentId_Hi>\n";

Så slår den over på Decimal Tal igen.

Men ville stadig gerne vide hvordan jeg kan fjerne de første 4 FFFF'er som jeg får ud når jeg udskriver via HEX
"FFFF1104" Om til "1104"
Avatar billede centauri Nybegynder
18. november 2011 - 12:56 #6
Har midlertidig løst det med
myfile << "<Test>"<< hex << ntohl(NImcAgt->AgentID_Low)-4294901760 << "</Test>\n";

Men er ikke sikker på det er den mest elegante måde at gøre det på.
Avatar billede arne_v Ekspert
18. november 2011 - 13:55 #7
<< setw(4) << setfill('0')

burde udskrive 4 tal med foranstillede nuller hvis faerre cifre
Avatar billede arne_v Ekspert
18. november 2011 - 13:55 #8
resetiosflags(ios::basefield)

formoder jeg ogsaa goer praecis hvad navnet antyder
Avatar billede arne_v Ekspert
17. december 2011 - 04:42 #9
all set?
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