07. december 2004 - 10:18
Der er
12 kommentarer og 2 løsninger
Konvertere en char til binær værdi?
Hej Som overskriften siger, skal jeg bruge et lille stykke kode, der kan konvertere en char ved navn brugerdata til en binær kode. Har selv kigget lidt på atoi, men kan ikke lige komme videre. mvh
Annonceindlæg fra Opentext
07. december 2004 - 12:12
#1
Vil du have konverteret 'A' til "01000001" eller ??
07. december 2004 - 12:15
#2
string Byte2Bin(unsigned char c) { string S; unsigned char Msk = 0x80; for (int i = 0; i < 8; ++i) { if (c & Msk) S += '1'; else S += '0'; Msk >>= 1; } return S; } måske?
07. december 2004 - 12:17
#3
Er det kun et enkelt "b" bogstav eller skal det være en hel "streng"?
07. december 2004 - 12:19
#4
fandt det her hvis det er en hel streng. char *StrToBinStr(char *str) { char *newstr = new[strlen(str)*8)+1]; char *cpold = str; char *cpnew = newstr; while('\0' != *cpold) { char mask = (char)0x80; int i; for( i = 0; i < 8; i++) { if((*cpold & mask) == 0) { *(cpnew++) = '0'; } else { *(cpnew++) = '1'; } mask = mask >> 1; //the right shift isn't always defined //so we must make sure the new MSB is 0 ourselves mask = mask & 0x7F; } cpold++; } *(cpnew) = '\0'; delete [] str; return(newstr); }
07. december 2004 - 21:43
#5
Undskyld svartiden :) Er fuldt optaget af projekt for tiden. Men ja, arne, skal bare ha konverteret fra A -> 01000001
07. december 2004 - 21:53
#6
Forudsat at du bruger C++ og ikke C så bør mcgoat 07/12-2004 12:15:01 kunne løse det.
08. december 2004 - 23:50
#7
Det er desværre C.
09. december 2004 - 00:03
#8
Så prøv følgende nedgraderede version: void byte2bin(unsigned char c,char *s) { int i; unsigned char mask; mask = 0x80; for (i = 0; i < 8; i++) { if (c & mask) s[i] = '1'; else s[i] = '0'; mask >>= 1; } res[8] = '\0'; } Du skal så kalde den med en char res[9]; som andet argument !
09. december 2004 - 21:14
#9
Den sidste linie var lige gal. Men følgende virker: #include <stdio.h> void byte2bin(unsigned char c,char *s) { int i; unsigned char mask; mask = 0x80; for (i = 0; i < 8; i++) { if (c & mask) s[i] = '1'; else s[i] = '0'; mask >>= 1; } s[8] = '\0'; } int main() { char res[9]; byte2bin('A',res); printf("%s\n",res); return 0; }
10. december 2004 - 00:12
#10
Okay tak, det vil jeg arbejde lidt med :D Smider du et svar?
10. december 2004 - 07:35
#11
ok men jeg synes at msgoat også skal have - det er en oversættelse af hans C++ kode til C
11. december 2004 - 11:19
#12
så venter vi lige til han smider et svar :D
16. december 2004 - 19:16
#13
takker :)
30. december 2004 - 14:02
#14
Selv tak :)
Kurser inden for grundlæggende programmering