paulo1205
(usa Ubuntu)
Enviado em 07/02/2013 - 09:07h
Olhando só o código (e um tanto superficialemnte), não vejo razão óbvia para você ter tido de trocar o tipo dos elementos do array
code de
unsigned char para
char. Fiquei imaginando motivos para tanto, mas não consegui tecer uma explicação suficiente. Segundo a ABI da Intel, um
char tem sinal por
default (i.e. é funcionalmente equivalente a
signed char), a não ser que você tenha alguma opção de compilação que altere esse
default. Que compilador você usou no Windows, e qual no Linux (gcc?)? Pode dar mais detalhes do caso?
Como eu previ no outro tópico em que você tratou de assunto parecido, seu programa não compilou numa máquina de 64 bits (arquitetura amd64) por causa da sua insistência em misturar ponteiros e inteiros -- aliás, o problema se agravou quando você moudou o tipo do inteiro de
long para
int. Não compreendi a razão por que você não quis trabalhar com
void* para representar ponteiros; por mais que em linguagem de máquina não haja distinção entre as representações de números e de endereços, o C e o C++ vêm evoluindo no sentido de deixar tal distinção sempre mais clara, em benefício de evitar acidentes no código fonte, embora não haja prejuízo do código compilado.