2013-11-22, 15:05
  #1
Medlem
Voldemort2s avatar
Jag behöver konvertera en strängvariabel till ett binärtal och vice versa. Hur gör jag detta?
Citera
2013-11-22, 16:22
  #2
Medlem
BNCs avatar
Vad menar du med binärtal, och hur ser strängen ut?
Jag menar, även en sträng är binär..

Har du en sträng "01110101010" och vill konvertera den till talet 0b01110101010 eller vad?
Och hur vill du ha tillbaka resultatet? I form av en integer innehållande talet?
Citera
2013-11-22, 17:34
  #3
Medlem
TorrentLovers avatar
Antar att du menar detta? http://stackoverflow.com/questions/2...ng-to-int-in-c
Citera
2013-11-22, 17:36
  #4
Medlem
printf() och scanf() stödjer inte binärt, bara oktalt, decimalt och hexadecimalt. Iaf inte i standarden, men jag tror att det finns extensions för det i kompilatorer, t.ex. i gcc.

För konvertering från sträng kan du använda strtoul() eller nån annan av de funktionerna, med 2 som sista argument (basen). För konvertering till sträng finns det nog ingen funktion, utan man måste göra det manuellt. Siffrorna kommer i omvänd ordning, så antingen får du skriva dem till strängen så och skriva en strrev()-funktion som du använder på den efteråt, eller (mycket snabbare) börja från slutet av strängen och gå mot början. Problemet blir att veta var slutet är. Om du vill ha ett exakt antal siffror (och fylla ut med nollor i början) är det inga problem, men om du bara vill ha så många siffror som finns i talet lär du nog antingen returnera en pekare till en bit in i buffern, eller köra en memmove() efteråt.

Kod:
ptr = buf + bufSize; /* peka till bortom strängbuffern */
*--ptr = '\0';
do {
    *--ptr = '0' + num % base;
} while (num /= base);
return ptr; /* eller memove() från ptr till buf */

I C++ kanske det finns enklare sätt.
Citera
2013-11-22, 20:31
  #5
Medlem
*sn0wflake*s avatar
I C++ kan du använda bitset. Ett exempel:

Kod:
std::bitset<16> bs (std::string("0101111001"));

Finns även metoder för att konvertera bitset till t.ex. en sträng (http://www.cplusplus.com/reference/b...set/to_string/).
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in