Я использую кусок кода на C ++ и компилирую его в Arduino IDE для вычисления CRC-32 байтов массива байтов. Я не уверен, как кто-то знаком с языком программирования Processing, но я действительно ценю вашу помощь, чтобы помочь мне переписать или преобразовать этот кусок кода для компиляции в Processing. Насколько я знаю, обработка — это язык на основе Java, и я не настолько опытен в этом.
Более того, я считаю, что обработка не очень гибкая в плане выделения памяти для переменных, особенно когда у вас есть «неподписанные» переменные. Как вы можете видеть, в коде CRC также есть случаи, когда мне нужно использовать «беззнаковые» переменные, которые, как я считаю, выделяют им четыре байта памяти.
Я действительно ценю любую помощь и руководство, поскольку я застрял на этом в течение долгого времени.
/*
The block of code that calculates the CRC-32 starts here
*/
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ (data >> (0 * 4));
crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> (1 * 4));
crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
unsigned long crc_string( unsigned char *s, unsigned int length)
{
unsigned long crc = ~0L;
unsigned int i;
for(i = 0; i<length;i++){
crc = crc_update(crc, *s++);
}
crc = ~crc;
return crc;
}
/*
The end of CRC-32 block
*/
Задача ещё не решена.