Как я могу преобразовать мои данные строки буфера в шестнадцатеричную строку .... так что пользователь отправляет ...?
give input = "AA12CDFF1000001201" Я должен преобразовать его в следующий формат "\ xAA \ x12 \ xCD \ xFF \ x10 \ x00 \ x00 \ x12 \ x01" и затем записать его в последовательный порт.
Когда промежуточное хранилище для буфера не требуется, это довольно просто.
Преобразование 2 байтов 1 оригинальной строки за один раз в байт, запись каждого байта за итерацию.
#include <ctype.h>
void write_hex_string(const char *hs) {
while (isxdigit(hs[0]) && isxdigit(hs[1])) {
char buf[3] = { hs[0], hs[1], '\0' };
unsigned char value = (unsigned char) strtol(buf, 0, 16);
write(fd, &value, sizeof value);
hs += 2;
}
}
Пример использования
write_hex_string("AA12CDFF1000001201");
Если код может изменить исходную строку как часть процесса, жизнь тоже проста. Так как есть удобное место для хранения конверсии.
void write_hex_string(char *hs) {
char *pair = hs;
size_t length = 0;
while (isxdigit(pair[0]) && isxdigit(pair[1])) {
char buf[3] = { pair[0], pair[1], '\0' };
hs[length++] = (unsigned char) strtol(buf, 0, 16);
pair += 2;
}
write(fd, hs, length);
}
1 До тех пор, пока оба символа являются шестнадцатеричными цифрами: ['0' - '9', 'A' - 'F', 'a' - 'f'].