Avatar billede bundgaard Nybegynder
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
Avatar billede arne_v Ekspert
07. december 2004 - 12:12 #1
Vil du have konverteret 'A' til "01000001" eller ??
Avatar billede mcgoat Nybegynder
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?
Avatar billede mcgoat Nybegynder
07. december 2004 - 12:17 #3
Er det kun et enkelt "b" bogstav eller skal det være en hel "streng"?
Avatar billede mcgoat Nybegynder
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);

}
Avatar billede bundgaard Nybegynder
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
Avatar billede arne_v Ekspert
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.
Avatar billede bundgaard Nybegynder
08. december 2004 - 23:50 #7
Det er desværre C.
Avatar billede arne_v Ekspert
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 !
Avatar billede arne_v Ekspert
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;
}
Avatar billede bundgaard Nybegynder
10. december 2004 - 00:12 #10
Okay tak, det vil jeg arbejde lidt med :D

Smider du et svar?
Avatar billede arne_v Ekspert
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
Avatar billede bundgaard Nybegynder
11. december 2004 - 11:19 #12
så venter vi lige til han smider et svar :D
Avatar billede mcgoat Nybegynder
16. december 2004 - 19:16 #13
takker :)
Avatar billede bundgaard Nybegynder
30. december 2004 - 14:02 #14
Selv tak :)
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