Convertendo de char assinado para char não assinado e vice-versa?
Estou trabalhando com JNI e tenho uma matriz do tipo jbyte, onde jbyte é representado como um caractere assinado, ou seja, variando de -128 a 127. Os jbytes representam pixels da imagem. Para o processamento de imagens, geralmente queremos que os componentes de pixel variem de 0 a 255. Portanto, desejo converter o valor de jbyte no intervalo de 0 a 255 (ou seja, o mesmo intervalo que caractere não assinado), fazer alguns cálculos no valor e armazenar o resultado como um jbyte novamente.
Como posso fazer essas conversões com segurança?
Consegui fazer com que esse código funcionasse, onde um valor de pixel é aumentado em 30, mas fixado no valor 255, mas não entendo se é seguro ou portátil:
#define CLAMP255(v) (v > 255 ? 255 : (v < 0 ? 0 : v))
jbyte pixel = ...
pixel = CLAMP_255((unsigned char)pixel + 30);
Estou interessado em saber como fazer isso em C e C ++.