¿Conversión de caracteres firmados a caracteres no firmados y viceversa?

Estoy trabajando con JNI y tengo una matriz de tipo jbyte, donde jbyte se representa como un carácter firmado, es decir, que va de -128 a 127. Los jbytes representan píxeles de imagen. Para el procesamiento de imágenes, generalmente queremos que los componentes de píxeles varíen de 0 a 255. Por lo tanto, quiero convertir el valor de jbyte al rango de 0 a 255 (es decir, el mismo rango que el carácter sin signo), hacer algunos cálculos sobre el valor y luego almacenar el resultado como un jbyte de nuevo.

¿Cómo puedo hacer estas conversiones de forma segura?

Logré hacer que este código funcione, donde un valor de píxel se incrementa en 30 pero se fija al valor 255, pero no entiendo si es seguro o portátil:

 #define CLAMP255(v) (v > 255 ? 255 : (v < 0 ? 0 : v))

 jbyte pixel = ...
 pixel = CLAMP_255((unsigned char)pixel + 30);

Estoy interesado en saber cómo hacer esto en C y C ++.

Respuestas a la pregunta(5)

Su respuesta a la pregunta