sign as signed char doesn't work as excepted on some ARM plataforms, reverted from 0b6c8aa1e030fe671ea9759a37fcc4c81c241f06