Как перебирать каждый байт LPBYTE в C ++ - PullRequest
0 голосов
/ 02 января 2012

Извините за простоту моего вопроса, я не привык работать с типами Windows.

У меня есть буфер LPBYTE, и я хочу XOR каждого байта с другим байтом.

Каков правильный способ получения длины буфера и итерации по нему в C ++?Я пытаюсь сделать что-то похожее на:

LPBYTE buf = *something*;
char key = 'X';

for(int i=0;i<len(buf);i++)
    buf[i] = buf[i] ^ key;

Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 02 января 2012
Буфер

A LPBYTE в C (/ C ++) - это просто адрес где-то в памяти, поэтому вам нужно следить за длиной этого буфера, желательно явным образом, имея значение размера.

Например

// use a struct instead to keep things together    
struct 
{
   LPBYTE buffer;
   size_t size;

} yourbuffer;

// init part
BYTE somewriteabledata[200];

yourbuffer.buffer = somewriteabledata;
yourbuffer.size = sizeof(somewriteabledata);

char key = 'X';

for(int i=0;i<yourbuffer.size;i++)
    yourbuffer.buf[i] = yourbuffer.buf[i] ^ key;
2 голосов
/ 02 января 2012

buf фактически присваивается значению (LPBYTE) LockResource(LoadResource(NULL, hRsrc));, есть предположения, что это нулевое окончание?

Зависит от типа ресурса, но, скорее всего, нет.В любом случае, поскольку вы работаете с ресурсами, вы можете получить размер ресурса с помощью функции SizeofResource.

Тем не менее, я не уверен, что вы можете писать о материалах, возвращаемых LockResource (фактически он возвращает указатель на область, содержащую ресурс, который, вероятно, является просто областью в исполняемом файле с отображением в памяти).Скорее всего, вы захотите скопировать его в другое место, прежде чем XORing.

HGLOBAL resource=LoadResource(NULL, hRsrc);
if(resource==NULL)
{
    // ... handle the failure ...
}
LPBYTE resPtr=LockResource(resource);
DWORD resSize=SizeofResource(NULL, hRsrc);
if(resPtr==NULL || resSize==0)
{
    // ...
}
std::vector<BYTE> buffer(resPtr, resPtr+resSize);
// Now do whatever you want to do with your buffer
for(size_t i=0; i<buffer.size(); ++i)
    buffer[i]^=key;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...