Ваш первый цикл не требует приведения. Вы можете неявно конвертировать из одного типа (например, unsigned char
) в более широкий тип (например, float
). Ваш второй цикл должен использовать static_cast
:
for (i=0; i< len; i++)
char_buff[i]= static_cast<unsigned char>(float_buff[i]);
Мы используем static_cast
, чтобы явно указать компилятору выполнить преобразование в более узкий тип. Если вы не используете приведение, ваш компилятор может предупредить вас, что преобразование может потерять данные. Присутствие оператора приведения означает, что вы понимаете, что можете потерять точность данных, и с этим все в порядке. Это не подходящее место для использования reinterpret_cast
. С static_cast
вы, по крайней мере, имеете некоторые ограничения на то, какие преобразования вы можете делать (например, это, вероятно, не позволит вам преобразовать Bird*
в Nuclear_Submarine*
). reinterpret_cast
не имеет таких ограничений.
Кроме того, вот что Бьярн Страуструп должен сказать по этому вопросу.