我在将位解释为字节时遇到了一些麻烦。我现在拥有的是一个 8、16、24 等位的字符串,我想将它们转换为十六进制字节。例如:
假设我有以下字符串:
10100101 00110000
我想将每个 4 解释为十六进制字节,所以我会有
1010 为 A,0101 为 5,0011 为 3,0000 为 0
然后当我把它们放在一起时,我应该得到
A5 30 根据各自的十六进制值对应 ¥0。不幸的是,我不完全确定如何做到这一点。可能有人有这样做的想法吗?如果是这样,那就太好了!谢谢!
这个问题已经为你解决了,在 C++ 标准库的<bitset>
标题中:
const unsigned long value1 = std::bitset<8>(std::string("10100101")).to_ulong();
const unsigned long value2 = std::bitset<8>(std::string("00110000")).to_ulong();
std::cout << std::hex << value1 << " " << std::hex << value2 << '\n';
您应该将每组 4 位转换为一个字符,例如。用一张桌子:
char Hex[16]={ '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
计算这个的通用方法(在任何 2 个 BASES 之间没有库)是:
步骤1)
my_number = 0; // start to read digits.
while((a = read_digit(BASE))>=0) {
// read_digit should return -1 for non digit
my_number=my_number * BASE + a;
// optionally: if (count++ == 4) break; /* read only 4 bits or digits */
}
第2步)
// convert my_number to another base (eg. hex or decimal or octal or Base64)
// by repeated division by BASE and storing the modulus
while (my_number) {
int modulus = my_number % BASE;
my_number/=BASE;
PUSH(modulus);
}
步骤 2.5)
// Pop the numbers in range (0..BASE-1) from stack
// to output them from left to right
while (POP(my_number) >=0) { // assumes that pop returns <0 when empty
cout << myTable[my_number]; // this can be selected for any base
}