Хорошо,
Я написал функцию, которая берет неподписанный символ из шестнадцатеричного файла и затем сдвигает его влево, чтобы уместить в WORD, DWORD или QWORD, как показано ниже:
retVal |= ((unsigned char)(memory[i]) << (8 * j));
(внутри al oop, отсюда переменные i и j).
Теперь visual studio напоминает мне о возможном переполнении арифметики.
Мой вопрос: если я ограничу j, то никогда больше чем 8 (размер uint64_t), я могу безопасно проигнорировать это сообщение? Я всегда немного раздражен предупреждениями и пытаюсь их устранить.
В моем понимании не должно иметь значения, насколько сильно вы сдвигаетесь влево перед сохранением значения, я ошибаюсь?
РЕДАКТИРОВАТЬ :
вот пример (это моя функция):
int getValuePNTR(const char* memory, int &start, int size)
{
uint64_t retVal = 0;
//now just add up array fields
for (int i = start + size-1,j = size-1; j >= 0; --j, i--)
{
//fprintf(stdout, "\ncycle: %d, memory: [%x]", j, memory[i]);
if ((unsigned char)memory[i] == 00 && j > 0)
retVal <<= 8;
else
retVal |= ((unsigned char)(memory[i]) << (8 * j));
}
//get the next field after this one
start += size;
return retVal;
}