help: получение шестнадцатеричных входных данных от пользователя в массив c кодом - PullRequest
0 голосов
/ 11 августа 2009

У меня есть массив (char data [16]), и я хочу получить данные от пользователя в шестнадцатеричных числах, чтобы массив выглядел следующим образом:

 data[0]=0x887f76b1
 data[1]=0x8226baac
 ...

когда пользовательский ввод был: 887f76b18226baac ...

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

Ответы [ 2 ]

2 голосов
/ 11 августа 2009

По сути, вам нужно прочитать первые 8 символов строки и преобразовать их в десятичный формат. Для этого есть утилиты. Например:

const char * data = "887f76b18226baac";
char buff[9] = {0};
unsigned long x = 0, y = 0;

sscanf(data, "%8s", buff);
x = strtoul(buff, NULL, 16);

sscanf(data + 8, "%8s", buff);
y = strtoul(buff, NULL, 16);

Поймите, что я исключил все проверки ошибок там. И sscanf, и strtoul возвращают значения ошибок (или предоставляют механизмы для проверки ошибок). В случаях, когда вы конвертируете значения, целесообразно проверить эти случаи ошибок.

Редактировать: Как уже упоминалось в комментариях, вы не сможете сохранить эти значения в массиве символов. Вам нужно иметь массив с правильным типом данных (для моего примера вы бы использовали длинный массив без знака [16])

0 голосов
/ 11 августа 2009

Я думаю, вы хотите что-то вроде следующего:

#include <stdio.h>
#include <string.h>

#define MAX_BUFFER 1024

int main(int argc, char **argv)
{
    char *input = "887f76b18226baac";
    unsigned char data[MAX_BUFFER];
    char tmp[3]; /* sue me for using magic numbers :) */
    int  i = 0, offset = 0;

    memset(data, 0, sizeof(data));

    while(sscanf(input + offset, "%2s", tmp) != EOF && i < MAX_BUFFER) {
        data[i++] = strtoul(tmp, NULL, 16);
        offset += 2;
    }
    return(0);
}

Я предполагаю, что вам абсолютно необходимо сохранить свои данные в массиве символов. Если вы хотите поместить 0x887f76b1 в один элемент массива, вам нужно будет использовать unsigned long , как предложено ezpz .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...