lightalex
@lightalex

Как преобразовать char массив в int С++?

Здравствуйте друзья!
Есть код который преобразовывает int в char:
unsigned char a[4];
int b = 124551;

*((int *) a) = b;

Подскажите, а можно ли по такому же принципу преобразовать char массив в int?
Или единственный выход - поэлементный перебор массива?
  • Вопрос задан
  • 3239 просмотров
Решения вопроса 3
@res2001
Developer, ex-admin
unsigned char a[4] = {'1', '2', '3', '4'};
int b = *(int*)a;

Только преобразования типов в С++ нужно делать с помощью плюсовых кастов, а не в сишном стиле.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Подскажите, а можно ли по такому же принципу преобразовать char массив в int?

unsigned char a[4] = {...};
int b = ...;
memcpy(a, &b, sizeof(a)); // -- int в char
memcpy(&b, a, sizeof(a)); // -- char в int
Ответ написан
@sddvxd
Благодаря обсуждению первого ответа и ответов автора можно организовать следующую программу:
union conv{
    char (*pcarr)[4];
    int* pint;
};

static conv bconv;

int main(){
    bconv.pint = new int(100);
    cout << *((int*)bconv.pcarr) << "\n"; //int to char (*)[4]

    bconv.pcarr = (char(*)[4])new char[4]{1,2,3,4};
    cout << *bconv.pint << "\n"; //char (*)[4] to int
}


union conv{
    unsigned char (*pcarr)[4];
    int* vint;
};

static conv bconv;


int main(){
    bconv.vint = new int(100);
    cout << *((int*)bconv.pcarr) << "\n"; //int to char (*)[4]

    bconv.pcarr = (unsigned char(*)[4])new unsigned char[4]{255,255,255,127}; //big-endian
    if(INT_MAX == *bconv.vint) cout << "bingo\n";
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы