Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c][c++] konwersja tekstu na typ binarny

Ostatnio zmodyfikowano 2018-01-22 14:05
Autor Wiadomość
aaadam
Temat założony przez niniejszego użytkownika
[c][c++] konwersja tekstu na typ binarny
» 2018-01-22 10:26:48
witam, zastanawiam się czy są jakieś mechanizmy wbudowane w c lub c++, które pozwolą np. char text[]="jakis tekst" zamienic  na tablicę bitów np. bool bText[] i na odwrót.
Oczywiście mogę sam takie coś napisać ale po co.
Pozdro
P-168905
geceves
» 2018-01-22 12:04:18
Czy koniecznie potrzebna będzie funkcja?

C/C++
#include <string>
#include <bitset>
#include <iostream>

using namespace std;

int main()
{
    string myString = "Hello World";
    for( std::size_t i = 0; i < myString.size(); ++i )
    {
        cout << bitset < 8 >( myString[ i ] ) << endl;
        cout << static_cast < char >( bitset < 8 >( myString[ i ] ).to_ulong() ) << endl;
    }
}


01001000
H
01100101
e
01101100
l
01101100
l
01101111
o
00100000
 
01010111
W
01101111
o
01110010
r
01101100
l
01100100
d
P-168906
mateczek
» 2018-01-22 12:27:44
char text[]="jakis tekst" zamienic na tablicę bitów np. bool bText[] i na odwrót.
Pytanie co chcesz osiągnąć. bo:

C/C++
#include <iostream>
using namespace std;
int main()
{
    bool bl[ 5 ]; //tablicja ma 5 bajtów stan true/false pamiętany jest w bajcie.
    char chr[ 5 ]; //również 5 bajtów;
    cout << sizeof( bl ) << " " << sizeof( chr ) << endl;
}

Jeśli chcesz wyświetlić każdy bajt tablicy w formie binarnej

C/C++
#include <iostream>
using namespace std;
int main()
{
    string imie = "ala";
    for( auto znak: imie ) {
        unsigned char maska = 0b10000000;
        for( int i = 0; i < 8; i++ ) {
            if( znak & maska ) cout << '1';
            else cout << '0';
           
            maska = maska >> 1;
        }
        cout << " ";
    }
}
można wyświetlić tablicę podając kody ascii w kodzie szesnastkowym
C/C++
#include <iostream>
using namespace std;
int main()
{
    string imie = "ala";
    for( auto znak: imie ) {
        cout << hex <<( int ) znak;
    }
}

c++ umożliwia takie struktury by bez obliczeń (jawnych) odwołać się do każdego bitu
C/C++
#include <iostream>
using namespace std;
struct literaBin { unsigned int bit8: 1, bit7: 1, bit6: 1, bit5: 1, bit4: 1, bit3: 1, bit2: 1, bit1: 1; }; //pola bitowe

int main() {
    string imie = "ala";
    for( auto litera: imie ) {
        literaBin * temp =( literaBin * ) & litera; //rzutowanie litery na pole bitowe
        cout << temp->bit1 << temp->bit2 << temp->bit3 << temp->bit4 << temp->bit5 << temp->bit6 << temp->bit7 << temp->bit8 << " ";
    }
}


To wszystko wyżej to nie były konwersje ale jedynie wyświettlenie informacji w inny sposób.

można dokonać takie konwersji z wykorzystaniem bitset
C/C++
#include <iostream>
#include<bitset>
#include<vector>
using namespace std;

int main()
{
    string imie = "ala";
    vector < bitset < 8 >> tablica;
    for( auto znak: imie ) {
        tablica.push_back( bitset < 8 >( znak ) );
    }
    //wyświetlenie tablicy
    for( auto element: tablica ) cout << element << " ";
   
}
Więc jak zamienić texst na tablice bitów?? wszystko zależy od preferencji i celu który chce się osiągnąć. (I podstawowe pytanie czy chce się zamieniać?? czy tylko wyświetlić oryginalny bit po bicie)


P-168907
aaadam
Temat założony przez niniejszego użytkownika
» 2018-01-22 14:05:17
potrzebuję zamienić, wprost "jakis tekst" na tablicę boolowska obojętne czy "jakis tekst" będzie stringiem czy char * i obojętne czy tablica będzie bool [] czy vector<bool>.
powyższe przykłady powinny wystarczyć,przerobię sobie, dzięki :)
P-168908
« 1 »
  Strona 1 z 1