反转十六进制字符串C++的第 7 位
Invert 7th bit of hex string C++
可能的重复项:
用 C++ 中的前导零更改十六进制数的位,(C)
我在十六进制字符串中有这个数字:
002A05(7th bit is set to 0)
我需要反转这个数字的第 7 位,所以转换后我会得到
022A05
但万一
ABCDEF(7th bit is set to 1)
我需要得到
A9CDEF
但它必须与每 6 个字符的十六进制数一起使用。
它必须是左起的第 7 位。我正在尝试将 OUI 转换为修改后的 EUI64
我尝试通过 strtol 将十六进制字符串转换为整数,但该函数带前导零。
请帮我如何解决它。
最简单的方法,但不一定是最干净的;
由于只有一个字符受到影响,因此您可以使用简单的字符串操作来完成此操作; 假设您的输入在字符串input
中是大写的;
input[1] = "23016745AB*******89EFCD"[input[1]-48];
#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->%sn", buf);
flipme(buf, "ABCDEF");
printf("ABCDEF->%sn", buf);
}
输出:
002A05->022A05
ABCDEF->A9CDEF
你写道:
我尝试通过 strtol 将十六进制字符串转换为整数,但该函数带前导零。
strtol
函数将其转换为数字。说它去掉前导零并不意味着什么,因为数字没有前导零——"6"和"06"是写同一数字的两种不同方式。如果您在打印时想要前导零,则可以添加它们。
num ^ 0x020000
^
是按位异或运算符。
给定一个整数x
,第 3 位倒置的数字是 x ^ 2
。其余的答案是之前给你的。
注意:在问题中,位从最高到最低计数,从 1 开始。那么 6 位十六进制数字的第 7 位是其第 2 高字符的第 3 位。通常,位从最低到最高计数,从 0 开始。
相关文章:
- 最高有效数字侧的第N位
- 在更改for循环的第三部分后,未使用for循环结果
- 删除列表中的第n个元素
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 如何使代码打印文本文件中的第一行?
- 在链表中的第 n 位插入显示分割错误
- 如何仅读取文本文件中的第一个值
- 查找不在标准中的第一个值::设置<int>最小-最大值
- 数组中所有元素的最新最小元素的第五个位置
- 圣诞节的第N天,C++递归
- 查找连续子数组的第二小和
- 在C++中打印多个矢量的第一个值
- cin语句在循环的第三次迭代中被跳过
- 如何用CMake处理只有头的第三部分
- 如何在对数时间内访问 c++ std::set 中的第 k 个元素?
- Systemc - 将sc_time四舍五入到最接近的第 10 SC_NS
- 指向多维数组的第 n 个元素的指针
- 删除最小堆中的第 i 个索引
- 代码无尽写入文本文件的第一行