Так, а теперь про код - он вроде правильный и работать должен правильно, но почему-то не работает, я никак не пойму почему. Прикол в том, что если переписать то же самое в виде:
f = fopen(f_name, "rb+"
; unsigned char cur;
for (int i=0; i
;
. Тогда не будет проблем с переносимостью между big/little-endian арзитектурами, с выравниванием проблем тоже не будет. По-моему, все портабельные программы работающие с бинарными данными делают именно так.Код: Выделить всё
__int32 ReadINT(void* pS)
{
unsigned char* p = (unsigned char*)pS;
__int32 res = p[3];
res = (res<<8) | p[2];
res = (res<<8) | p[1];
res = (res<<8) | p[0];
return res;
}
void WriteINT(__int32 V, void* pD)
{
unsigned char* p = (unsigned char*)pD;
*p++ = V; V>>=8;
*p++ = V; V>>=8;
*p++ = V; V>>=8;
*p = V;
}Код: Выделить всё
char Buf[SIZE]; // Это твой буфер
int a = ReadINT(&Buf[38]);
a += 5;
WriteINT(a, &Buf[38]);
