глюк студии или как??
короче столкнулся я с одной багой... пишу на студии 2005. В памяти у меня есть объект типа FileMapping. Ну и значит копирую я сначала туда информацию по 16 байт.. потом есть место где тупо по адресу обращаюсь и копирую нужных 8 байт... глюк состоит в том, что при копировании в 8-байтовый буфер все последовательности байт 0x0d 0x0a записываются как 0ч0а. то-есть байт тупо не записывается. при этом чтение сдвигается на 1 байт. Я попробовал записывать этот буфер в файл. так вот при записи, там где должно быть 0x0d 0x0a так и записывается(откуда теперь берется этот лишний байт я понять не могу), но при записи такой строчки вместо 8 байт в файл пишется 9!!!! Как это возможно??
Код в студию
while (FilePos != SizeOfDataToDecrypt)
{
unsigned char TempDataEncrypted[16];
unsigned char TempDataDecrypted[16];
_read(rf->_file,TempDataEncrypted,16);
decrypt(TempDataEncrypted, TempDataDecrypted, &oDecryptContext);
_write(wf->_file,TempDataDecrypted,16);
TempHandle = (HANDLE)((int)pContainerMapping+pOffset);
//CopyMemory((PVOID)TempHandle,TempDataDecrypted,16);
Tempp = (unsigned char *)((int)TempHandle);
for (int counter = 0; counter < 16; counter++)
{
Tempp[counter] = TempDataDecrypted[counter];
}
pOffset += 16;
fgetpos(rf,&Pos);
FilePos += 16;
}
а так читаем:
LPCTSTR DirTable;
DirTable = (LPCTSTR)((int)Container + 0x600);
int pOffset = 0;
char Temp[8];
bool Flag = false;
int CheckIfEmpty = 0;
while (!Flag)
{
char * Tempp = (char *)((int)DirTable + pOffset);
for (int counter = 0; counter < 8; counter++)
{
Temp[counter] = Tempp[counter];
}
if ((Temp[0] == 0) && (Temp[1] == 0) && (Temp[2] == 0) && (Temp[3] == 0) && (Temp[4] == 0) && (Temp[5] == 0) && (Temp[6] == 0) && (Temp[7] == 0))
{
Flag = true;
if (CheckIfEmpty == 1)
return 0;
}
pOffset += 8;
CheckIfEmpty ++;
}