W C++ potrafię trochę pisać więc mój problem nie jest natury implementacyjnej. Napisałem programik(kod niżej) który wyświetla kodowanie znaczka w formie dziesiętnej, binarnej i hexadycemalnej. Zdaje sobie też sprawę że np literkę "ś" w ASCII nie zakoduję (chyba że o czymś nie wiem :-) ). Nie wiem jak zrobić, żeby np wczytując literkę "ą" która ma kod dziesiętny 185(standard win 1250) potem zamieniając ją na kod unicode dziesiętnie 261 i potem zapisując ten znak do pliku to żeby to pozostała literka "ą" a nie jakiś krzaczek :-| Wiem o konieczności używania wchar itp ale nie wiem w którym miejscu kodu mogłoby mi się to ustrojstwo przydać.
Jeżeli napisałem jaką totalną głupotę to nie śmiejcie się ze mnie zbyt głośno :d Szperałem sporo w sieci i jestem lekko zdezorientowany(być może nie potrafię szukać).
A to mój obiecany kodzik, pokazuje znaki które można zapisać na jednym bajcie ale to spokojnie zupgraduje jeśli będzie konieczność:
EDIT: broń Boże niech nikt kodu nie analizuje, nie w tym jest problem. Mam problem natury merytorycznej a ten kodzik napisałem nie wiedząc dokładnie jeszcze co mam robić a pomyślałem że może się przydać przy wczytywaniu plików ;-P
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
void binarny(int liczba, int *wsk_binarny);
int main(int argc, char *argv[])
{
ifstream::pos_type rozmiar;
ifstream plik("tekst.txt", ios::in|ios::ate);
if(plik.is_open())
{
rozmiar=plik.tellg();
plik.seekg (0,ios::beg);
int rozmiar2=(int)rozmiar;
char *tab_char;
tab_char=new char [rozmiar2];
char *wsk_tab=tab_char;
plik.read(wsk_tab, rozmiar2);
int *tab_int;
tab_int=new int [rozmiar2];
int tab_binar[8];
int liczba;
for(int i=0;i<rozmiar;i++)
{
cout<<tab_char[i]<<"\t";
tab_int[i]=static_cast<int>(tab_char[i]);
if(tab_int[i]<0){
tab_int[i]+=256;}
liczba=tab_int[i];
binarny(liczba, tab_binar);
cout<<tab_int[i]<<"\t";
for(int i=0;i<8;i++)
{
cout<<tab_binar[i];
}
int prawa_hex[4], lewa_hex[4];
for(int i=0;i<4;i++)
{
lewa_hex[i]=tab_binar[i];
}
int m=0;
for(int i=4;i<8;i++)
{
prawa_hex[m]=tab_binar[i];
m++;
}
int tab_mnozenia[4]={8,4,2,1};
for(int i=0;i<4;i++)
{
lewa_hex[i]=lewa_hex[i]*tab_mnozenia[i];
prawa_hex[i]=prawa_hex[i]*tab_mnozenia[i];
}
int lewa_hexF=lewa_hex[0]+lewa_hex[1]+lewa_hex[2]+lewa_hex[3];
int prawa_hexF=prawa_hex[0]+prawa_hex[1]+prawa_hex[2]+prawa_hex[3];
char znak[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char wartosc_hex[2];
for(int i=0;i<16;i++)
{
znak[i];
if(lewa_hexF==i)
{
wartosc_hex[0]=znak[i];
}
if (prawa_hexF==i)
{
wartosc_hex[1]=znak[i];
}
}
cout<<"\t";
cout<<wartosc_hex[0]<<wartosc_hex[1];
cout<<endl;
}
}
else
{
cout<<"kurwa nie otworzyl sie skubaniec"<<endl;
}
plik.close();
system("PAUSE");
return EXIT_SUCCESS;
}
void binarny(int liczba, int *wsk_binarny)
{
int reszta;
int tab_pom[8];
for(int i=0;i<8;i++)
{
reszta=liczba%2;
if(reszta!=0){
tab_pom[i]=1;}
else{
tab_pom[i]=0;}
liczba=liczba/2;
}
int p=7;
for(int i=0;i<8;i++)
{
wsk_binarny[i]=tab_pom[p];
p--;
}
}