Konwersja pomiędzy unsigned char a char

0

szukam metody na konwersje z unsigned char na char i z powrotem

5

static_cast<typ na który chcesz rzucić>(zmienna)

0

@wilkwielki:

unsigned char c;

auto c2{static_cast<char>(c)};
0
Eldorad O. napisał(a):

@wilkwielki:

unsigned char c;

auto c2{static_cast<char>(c)};

ja niełąpie w czym rzecz z tymi funkcjami

0
wilkwielki napisał(a):
Eldorad O. napisał(a):

@wilkwielki:

unsigned char c;

auto c2{static_cast<char>(c)};

ja niełąpie w czym rzecz z tymi funkcjami

juz mam znalazłem https://cpp0x.pl/kursy/Kurs-C++/Poziom-5/Kontenery-asocjacyjne-std-set-i-std-map/589 ale nie ma char

2
wilkwielki napisał(a):

juz mam znalazłem https://cpp0x.pl/kursy/Kurs-C++/Poziom-5/Kontenery-asocjacyjne-std-set-i-std-map/589 ale nie ma char

To jest zupełnie co innego. Jeśli kompletnie nie wiesz, co robisz, to niestety musisz wrócić do kursu C++ i nadrobić zaległości.

1

Pytanie jest niepełne nie wiadomo w czym jest problem.
Konwersja między char i unsigned char następuje domyślnie. Nie trzeba nic robić. Wystarczy proste przypisane.

Ciekawsza jest mała pułapka przy konwersji typów całkowitych. Takie coś nie działa zgodnie z oczekiwaniem:

char ch = '\xa1'
auto x = static_cast<unsigned int>(ch);
assert(x == 0xa1);

bo zrobi char -> int -> unsigned int.
https://godbolt.org/z/96d5vj3f7

0

Czym jest dla ciebie konwersja między unsigned a signed char? Typ unsigned char ma zakres 0~255, a signed char -128~+127. Więc jeśli chodzi o część wspólną tych zakresów, czyli wartości od 0 do 127, to w C wystarczy zwykłe przypisanie. W przypadku innych wartości musisz się zastanowić o co Ci dokładnie chodzi, ponieważ nie możesz zapisać wartości poniżej 0 za pomocą typu bez znaku, ani wartości powyżej 127 za pomocą typu signed char. I teraz jeśli celem jest odwzorowanie bitów, to też wystarczy przypisanie - testowane. Ale jakbyś np. chciał konwertować wartości spoza zakresu z tzw. nasyceniem, oto kod.

#include <limits.h>
unsigned char uc;
signed char sc;
/* ... */
if (uc <= SCHAR_MAX)
        sc = uc;
else
        sc = SCHAR_MAX;
/* ... */
0
unsigned char qta = 240;
char cz = (char)qta;

@MarekR22: że Ci sie dalej chce tutaj odpowiadać, to jestem pełen podziwu xd

0
MexikanoS napisał(a):
unsigned char qta = 240;
char cz = (char)qta;

@MarekR22: że Ci sie dalej chce tutaj odpowiadać, to jestem pełen podziwu xd

a jak zmierzyć długość stringa tzn unsigned char bo metoda strlen jest taki błąd C:\projekty\charnauchar\charnauchar.cpp(16) : error C2664: 'strlen' : cannot convert parameter 1 from 'unsigned char *' to 'const char *'

0

To trzeba było od razu o to pytać… 🤦 Szczególnie, że unsigned char to coś zupełnie innego niż unsigned char *.

A co do samego pytania — najpierw warto się zastanowić, czy na pewno nie robisz niczego dziwnego i w ogóle potrzebujesz tak cudować, a jeśli faktycznie tak, to reinterpret_cast Ci pomoże. A jeśli piszesz w C, nie w C++ (bo w sumie nie napisałeś, w czym piszesz, a z jakiegoś powodu się męczysz z C-stringami…), to tam jest tylko jeden sposób castowania: (typ) zmienna.

0
Althorion napisał(a):

To trzeba było od razu o to pytać… 🤦 Szczególnie, że unsigned char to coś zupełnie innego niż unsigned char *.

A co do samego pytania — najpierw warto się zastanowić, czy na pewno nie robisz niczego dziwnego i w ogóle potrzebujesz tak cudować, a jeśli faktycznie tak, to reinterpret_cast Ci pomoże. A jeśli piszesz w C, nie w C++ (bo w sumie nie napisałeś, w czym piszesz, a z jakiegoś powodu się męczysz z C-stringami…), to tam jest tylko jeden sposób castowania: (typ) zmienna.

już mam

unsigned char *v;
int l = strlen((char*)v);
0

To jest typowy problem XY.
Niby znalazłeś odpowiedź, ale to nadal nie wydaje się tym z czym naprawdę się mierzysz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1