У меня есть следующая функция:
void func(unsigned long v)
{
char max_byte = 0xFF;
char buffer[8];
buffer[0] = static_cast<char>((v) & max_byte);
buffer[1] = static_cast<char>((v >> 8) & max_byte);
buffer[2] = static_cast<char>((v >> 16) & max_byte);
buffer[3] = static_cast<char>((v >> 24) & max_byte);
buffer[4] = static_cast<char>((v >> 32) & max_byte);
buffer[5] = static_cast<char>((v >> 40) & max_byte);
buffer[6] = static_cast<char>((v >> 48) & max_byte);
buffer[7] = static_cast<char>((v >> 56) & max_byte);
}
которая принимает аргумент unsigned long
и вставляет его 8 байтов в буфер char
(не пытайтесь понять почему. Это краткая версия значимой функции).
Этот код хорошо компилируется на 64-битной, но на 32-битной я получаю следующее предупреждение:
warning: right shift count >= width of type
ссылаясь на строки:
buffer[4] = static_cast<char>((v >> 32) & max_byte);
buffer[5] = static_cast<char>((v >> 40) & max_byte);
buffer[6] = static_cast<char>((v >> 48) & max_byte);
buffer[7] = static_cast<char>((v >> 56) & max_byte);
Я думаю, что понимаю предупреждение, но я не уверен, что мне делать, чтобы иметь возможность плавно скомпилировать его и на 32-битной версии.
unsigned long
в 32-битной системе? - person Codor   schedule 09.05.2014unsigned long
имеет длину 64 бита, и мне нужно правильно его обработать. - person idanshmu   schedule 09.05.2014