rendered paste body utf32_t wtf32;
wtf32.size = str.length;
wtf32.data = (uint32_t *)malloc(sizeof(uint32_t) * str.length);
int j = 0;
for(unsigned int i = 0; i < wtf32.size; i++) {
if((*(str.data + j)) >= 0x80) { /* multibyte character */
if(((*(str.data + j) & 0xFFFF ) & 0xF0) == 0xF0) { /* 4-tavuiset */
*(wtf32.data + i) = ((*(str.data + j) & 0x7) << 18);
*(wtf32.data + i) |= ((*(str.data + ++j) & 0x3F) << 12);
*(wtf32.data + i) |= ((*(str.data + ++j) & 0x3F) << 6);
*(wtf32.data + i) |= ((*(str.data + ++j) & 0x3F));
} else if(((*(str.data + j) & 0xFFFF) & 0xE0) == 0xE0) { /* 3-tavuiset */
*(wtf32.data + i) = ((*(str.data + j) & 0xF) << 12);
*(wtf32.data + i) |= ((*(str.data + ++j) & 0x3F) << 6);
*(wtf32.data + i) |= ((*(str.data + ++j) & 0x3F));
} else if(((*(str.data + j) & 0xFFFF) & 0xC0) == 0xC0) { /* 2-tavuiset */
*(wtf32.data + i) = ((*(str.data + j) & 0x1F) << 6);
*(wtf32.data + i) |= ((*(str.data + ++j) & 0x3F));
}
} else {
*(wtf32.data + i) = (*(str.data + j));
}
j++;
}
return wtf32;