一段md5的实现代码,在windows下运行结果与linux下运行结果不同,分析后发现是windows和linux下long类型长度不同导致。
static const char *sp, *ep;
unsigned char final[MD5_DIGESTSIZE];
int sl, pl, i;
struct md5_ctx ctx, ctx1;
unsigned long l;
不同平台下C\C++数值数据类型长度如下:
其中long类型和指针类型需要特别注意,编写跨平台的软件时尽量不要使用long类型,或者需要对long类型做特殊处理。
上述代码,在linux64下,就要改成如下定义:(注意变量 “l”)
static const char *sp, *ep;
unsigned char final[MD5_DIGESTSIZE];
int sl, pl, i;
struct md5_ctx ctx, ctx1;
unsigned int l;