Помощь - Поиск - Пользователи - Календарь
Полная версия: Запись в переменную типа int
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
18192123
Имеется текстовый файл, из которого производится считывание символов типа char.


int temp=0,i,j;
char ch;
int masT[255]={0};
//...
i=0;
j=0;
while (!feof(f))
{
fread(&ch,sizeof(char),1,f);
temp=temp|ch;
i++;
if (i==4)
{
masT[j]=temp;
temp=0;
i=0;
j++;
}
else temp=temp<<8;
}



когда я таким образом пытаюсь "наполнить" temp, то 1-й считанный символ окажется в итоге самым старшим (левым) разрядом, .., последний - самым младшим.
Мне же нужно наоборот..Объясните пожалуйста, как этого добиться?
volvo
Вот так что-ли:
	unsigned int temp = 0, i = 0, j = 0;
...
while (!feof(f)) {
fread(&ch, sizeof(char), 1, f);
temp |= ((unsigned int)ch) << 24;
if(++i == 4) {
masT[j++] = temp;
temp = i = 0;
}
else temp >>= 8;
}

?
18192123
по тому, как было у меня:

qwer - в файле
i=0

ch = 0x71
temp = 0x71
i=1
temp = 0x7100

ch = 0x77
temp = 0x7177
i=2
temp = 0x717700

ch = 0x65
temp = 0x717765
i=3
temp = 0x717765

ch = 0x72
temp = 0x71776572
i=4
temp = 0x71776572

нужно же temp=72657771
Не пойму, как добиться этого, как и куда сдвигать..?
volvo
Я написал выше, как этого добиться... Если ты думаешь, что я не проверяю код, перед тем, как написать - ты очень ошибаешься:
Нажмите для просмотра прикрепленного файла

Видишь, чему равен temp? В 16-ричной системе...
Archon
Ещё можно вот так:
char *i = (char *)masT;
while (!feof(f)) fread(i++, sizeof(char), 1, f);

volvo
Цитата
Ещё можно вот так:
Ты можешь гарантировать, что это всегда будет работать так, как нужно?
Archon
Прошу прощения, если что-то упустил. Объяснишь? Я неоднозначностей не замечаю...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.