Вся арифметика распределения буфера и указателя мешает пониманию. По сути, проблема в том, что у char ограниченный диапазон, обычно от -127 до 128 или от 0 до 255.
Самый простой способ увидеть вашу проблему с помощью такого кода:
char c = 256;//no good
int i = 256;//no problem
Из того, что вы сказали в комментариях, звучит так, как будто вы хотите привести char * к int * и таким образом записать в буфер. Я надеюсь, что вы знаете, что делаете.
*(int*)x[2] = 666;