Любой способ создать символ размера 32 в ANSI c?
Я знаю, что C++11 имеет тип char32_t, который составляет 4 байта, и мне интересно, возможно ли реализовать что-то подобное в C. В программе, которую я пишу, необходимо, чтобы все массивы char были кратны 4 байтам.
2 ответа
Как вы планируете работать с этими данными? Будете ли вы использовать только один байт в 32-битной переменной или будете хранить в нем фактические 32-битные данные?
Одним из простых решений было бы создание собственного абстрактного типа данных, чтобы вы могли изменить его позже:
#include <stdint.h>
typedef int32_t mChar;
mChar myChar32Array[100]; // Allocates 100x32-bit values
Существует большая ловушка с возиться с char
связанные типы данных: многие библиотеки и фрагменты кода предполагают, что char
это char
при работе с текстом. Если вы планируете использовать функции манипуляции со строками и ожидаете, что они будут работать в нескольких системах, вы всегда будете объявлять строки как массивы char
и никогда как signed char
или же unsigned char
, Единственный раз, когда вы должны использовать unsigned char
в том случае, если вы работаете с 8-битными двоичными данными напрямую и не хотите иметь дело с неожиданными странностями, такими как расширение знака, которое даст вам забавные значения, если вы не будете осторожны.
Стандарт C11 поддерживает char32_t
со строками, закодированными в UTF-32, например:
#include <uchar.h>
int main() {
char32_t *str = U"Hello world";
}
Программа компилируется чисто с скажем gcc -std=c11
,