Я хочу написать функцию
int char_to_int(char c);
, которая преобразует данный символ в int с нулевым расширением значения. Таким образом, если у char есть N битов, а int имеет M битов, M> = N, то MN старших значащих битов значения int должны быть равны нулю, а N младших значащих битов значения int должны совпадать с битами значения char.
Это кажется простой задачей, но я не уверен, как написать ее, опираясь только на стандартное поведение. Нет UB, нет поведения, определенного для реализации. Не полагаясь на то, что char является 8-битным, int - 32-битным, char - без знака и любые другие распространенные предположения, которые не гарантированы стандартом.
Причина, по которой я хочу это знать, заключается в том, что я сделал этопреобразование несколько раз в прошлом, но недавно я узнал об ограниченных гарантиях, которые дает C ++ для своих типов данных. Так что теперь мне любопытно, какой правильный, стандартный подход соответствует.
Я не думаю, что
return (int) c;
достаточно хорошо, правда?