Хранить содержимое буфера в NSString - PullRequest
0 голосов
/ 04 сентября 2011

Добрый вечер,

Я написал приведенный ниже код на C, чтобы прочитать и распечатать из двоичного файла случайную шестнадцатеричную строку с постоянной длиной, зная определенное смещение и расположение строки относительно смещения.

FILE *f = NULL;
unsigned char *buffer = NULL;
unsigned long fileLen;        
unsigned char bytes[] = {0x22, 0x22, 0x22, 0x22};

f = fopen(argv[1], "rb");
if (!f) 
{
    fprintf(stderr, "Unable to open %s\n", argv[1]);
    return -1;
}

fseek(f, 0, SEEK_END);
fileLen=ftell(f);
fseek(f, 0, SEEK_SET);

buffer=malloc(fileLen);
if (!buffer) 
{
    fprintf(stderr, "Memory error!\n");
    fclose(f);
    return -1;
}

fread(buffer, fileLen, 1, f);
fclose(f);

unsigned int *p = memmem(buffer, fileLen, bytes, 4);

if (!p) {

    return -1;
}

unsigned long off_to_string = 4 + 0x12 + ((void *)p) - ((void *)buffer);

for (unsigned long c = off_to_string; c < off_to_string+0x30; c++)
{
    printf("%.2X", (int)buffer[c]);
}

printf("\n");
free(buffer);

Я хотел бы использовать этот код в приложении Какао, я пытался сделать что-то вроде:

NSMutableString *tehString = [[NSMutableString alloc] init];

for (unsigned long c = off_to_string; c < off_to_string+0x30; c++)
{
    [tehString appendString:...]
}

проблема в том, что я должен передать строку NSString appendString: иЯ даже не знаю, как напечатать его шестнадцатеричное представление.

Спасибо!

PS: Не стесняйтесь улучшать код "читателя шестнадцатеричной строки":)

1 Ответ

1 голос
/ 04 сентября 2011

NSStrings могут быть созданы с использованием тех же спецификаторов формата строки .

чтобы вы могли сделать это:

[tehString appendString:[NSString stringWithFormat:@"%.2X", (int)buffer[c]]];

предостережение: я только что набрал это, так что это может быть немного не так - но вы поняли.

...