Инвертировать 7-й бит шестнадцатеричной строки Переполнение стека

Возможный дубликат:
Изменить бит шестнадцатеричного числа с ведущими нулями в C ++, (C)

У меня есть этот номер в шестнадцатеричной строке:

002A05(7th bit is set to 0)

Мне нужно инвертировать 7-й бит этого числа, поэтому после преобразования я получу

022A05

Но в случае

ABCDEF(7th bit is set to 1)

мне нужно получить

A9CDEF

Но он должен работать с шестнадцатеричным числом каждые 6 символов.

Это должно быть 7-й бит слева. Я пытаюсь конвертировать OUI в модифицированный EUI64

Я попытался преобразовать шестнадцатеричную строку в целое число через strtol, но эта функция убирает начальные нули.

Пожалуйста, помогите мне, как я могу решить это.

-5

Решение

#include <stdio.h>

void flipme(char *buf, const char *inBuf)
{
int x;
sscanf(inBuf, "%x", &x);
x ^= 1 << 17;
sprintf(buf, "%06X", x);
}

int main(void)
{
char buf[16];

flipme(buf, "002A05");
printf("002A05->%s\n", buf);

flipme(buf, "ABCDEF");
printf("ABCDEF->%s\n", buf);
}

Выход:

002A05-> 022A05
ABCDEF-> A9CDEF

Вы написали:

Я попытался преобразовать шестнадцатеричную строку в целое число через strtol, но эта функция убирает начальные нули.

strtol функция преобразует его в число. Ничего не значит, что он удаляет начальные нули, потому что числа не имеют начальных нулей — «6» и «06» — это два разных способа записи одного и того же числа. Если вы хотите, чтобы начальные нули при печати, вы можете добавить их тогда.

0

Другие решения

Самый простой способ, но не обязательно самый чистый;

Поскольку затрагивается только один символ, вы можете просто сделать это, используя простую манипуляцию со строками; при условии, что ваш ввод в верхнем регистре в строке input;

input[1] = "23016745AB*******89EFCD"[input[1]-48];
2

num ^ 0x020000

^ является побитовым оператором xor.

0

Дано целое число xчисло с инвертированным 3-м битом x ^ 2,
Остальная часть ответа была дана вам ранее.

Примечание: в вопросе биты отсчитываются от старшего к младшему, начиная с 1. Затем 7-й бит шестнадцатеричного шестизначного числа является 3-м битом его 2-го старшего символа. Обычно биты считаются от младшего к старшему, начиная с 0, хотя.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector