java和C的数据转换问题
因为要把以前用C语言实现的算法改为java实现,遇到一个问题,以前C语言程序里面有:
unsigned char sm3_internal[32];
#define U32 unsigned long
#define AA (*(U32*)(sm3_internal))
#define BB (*(U32*)(sm3_internal+4))
#define CC (*(U32*)(sm3_internal+8))
#define DD (*(U32*)(sm3_internal+12))
#define EE (*(U32*)(sm3_internal+16))
#define FF (*(U32*)(sm3_internal+20))
#define GG (*(U32*)(sm3_internal+24))
#define HH (*(U32*)(sm3_internal+28))
AA = 0x7380166f;
BB = 0x4914b2b9;
CC = 0x172442d7;
DD = 0xda8a0600;
EE = 0xa96f30bc;
FF = 0x163138aa;
GG = 0xe38dee4d;
HH = 0xb0fb0e4e;
这段代码意思是,AA,BB,CC.....HH是unsigned long类型,而且都是4字节,sm3_internal这个数组的32个字节就是与这8个数字对应的4个字节,总共是32个。
这段代码我改怎么改,特别是AA,BB....HH,java里面根本就没有合适的数据类型,long是8个字节,不满足要求,int是4个字节,可是远远小于unsigned long所能表示的范围,会越界。