Size: a a a

2020 September 03

DC

Daniil Chernyshev in Deus Volt!
jon pedro
у меня есть есть хексовое значение char переменной 0x80, или же 128. Если сделать статик каст этой переменной к uint16_t, то я получаю огромное число. а хотелось бы сохранить конкретное битовое значение
кстати, обычное приведение типа в стиле С вроде ```myvar = (uint16_t)my_char;```как раз и делает этот reinterpret_cast
источник

D

Dr Zlo in Deus Volt!
Daniil Chernyshev
кстати, обычное приведение типа в стиле С вроде ```myvar = (uint16_t)my_char;```как раз и делает этот reinterpret_cast
*static_cast
источник

jp

jon pedro in Deus Volt!
Dr Zlo
*static_cast
Статик не нужон
источник

DC

Daniil Chernyshev in Deus Volt!
Dr Zlo
*static_cast
м, мой косяк. там целый список приведений оказывается.
источник

D

Dr Zlo in Deus Volt!
jon pedro
Статик не нужон
нужон-не нужон, но приведения в си это static_cast
источник

DC

Daniil Chernyshev in Deus Volt!
потыкал я эти преобразования. Так как char - знаковый (в данной реализации), то static_cast и си-каст производят расширение со знаком (забивают единицами старшие разряды). Решение - сначала кастовать к беззнаковому uint8_t, а уже потом расширять до uint16_t. Крч:
uint16_t value = (uint8_t)my_char
источник

jp

jon pedro in Deus Volt!
Daniil Chernyshev
потыкал я эти преобразования. Так как char - знаковый (в данной реализации), то static_cast и си-каст производят расширение со знаком (забивают единицами старшие разряды). Решение - сначала кастовать к беззнаковому uint8_t, а уже потом расширять до uint16_t. Крч:
uint16_t value = (uint8_t)my_char
Спасибо, попробую
источник

DN

Dmitry Noskov in Deus Volt!
Dr Zlo
нужон-не нужон, но приведения в си это static_cast
Приведения в си и статик каст - это разные вещи
источник

DN

Dmitry Noskov in Deus Volt!
Daniil Chernyshev
кстати, обычное приведение типа в стиле С вроде ```myvar = (uint16_t)my_char;```как раз и делает этот reinterpret_cast
Реинтерпрет, только если не получилось сделать сначала конст каст, потом статик каст
источник

D

Dr Zlo in Deus Volt!
Dmitry Noskov
Реинтерпрет, только если не получилось сделать сначала конст каст, потом статик каст
да, но нет
источник

D

Dr Zlo in Deus Volt!
C++ Standard, 5.4 expr.cast paragraph 5
источник

D

Dr Zlo in Deus Volt!
По порядку:
const_cast
static_cast
static_cast followed by const_cast
reinterpret_cast
reinterpret_cast followed by const_cast
источник

DN

Dmitry Noskov in Deus Volt!
Dr Zlo
да, но нет
Я опустил эти комбинации с константностью)
источник

D

Dr Zlo in Deus Volt!
Dr Zlo
нужон-не нужон, но приведения в си это static_cast
Но да, я тут ошибался
источник

RS

Roman Storozhenko in Deus Volt!
Daniil Chernyshev
потыкал я эти преобразования. Так как char - знаковый (в данной реализации), то static_cast и си-каст производят расширение со знаком (забивают единицами старшие разряды). Решение - сначала кастовать к беззнаковому uint8_t, а уже потом расширять до uint16_t. Крч:
uint16_t value = (uint8_t)my_char
не извращайся и заюзай Сишный каст
источник

VK

Valentin Kornienko in Deus Volt!
Daniil Chernyshev
потыкал я эти преобразования. Так как char - знаковый (в данной реализации), то static_cast и си-каст производят расширение со знаком (забивают единицами старшие разряды). Решение - сначала кастовать к беззнаковому uint8_t, а уже потом расширять до uint16_t. Крч:
uint16_t value = (uint8_t)my_char
Если вы что-то такое делаете- лучше явно указывайте плюсовыми кастами свои намерения.
источник

VK

Valentin Kornienko in Deus Volt!
Сишные касты в плюсовом коде это стремновато
источник

DC

Daniil Chernyshev in Deus Volt!
Согласен, лень набирать было) нужен был static_cast<uint8_t>
источник

RS

Roman Storozhenko in Deus Volt!
Valentin Kornienko
Сишные касты в плюсовом коде это стремновато
аргументируй
источник

IS

Igor Spiridonov in Deus Volt!
Valentin Kornienko
Сишные касты в плюсовом коде это стремновато
А асмовые?
источник