优化碱基之间的转换 - C++
Optimizing conversion between bases - C++
我正在设计一个密码,需要在一个循环中反复转换碱基。我已经优化了其他所有内容,但我不太熟悉 C++ 代码,并且正在尝试弄清楚如何使转换更快。
这是我当前使用的代码:
string digits = "0123456789abcdef";
string tohex(string number) { // Decimal to Hexadecimal function
long length = number.length();
string result = "";
vector<long> nibbles;
for ( long i = 0; i < length; i++ ) {
nibbles.push_back(digits.find(number[i]));
}
long newlen = 0;
do {
long value = 0;
newlen = 0;
for ( long i = 0; i < length; i++ ) {
value = (value * 10) + nibbles[i];
if (value >= 16) {
nibbles[newlen++] = value / 16;
value %= 16;
} else if (newlen > 0) {
nibbles[newlen++] = 0;
};
};
length = newlen;
result = digits[value] + result;
} while (newlen != 0);
return result;
}
在我的例子(密码)中,数字总是适合一个整数,所以它可以做到:
string tohex(string number) {
int num = std::stoi(number);
std::stringstream hexnumber;
hexnumber << std::hex << num;
return hexnumber.str();
}
这样更好,因为它更简单并且使用了内置的 std::hex 方法。
我正在设计一个密码,需要在一个循环中反复转换碱基。我已经优化了其他所有内容,但我不太熟悉 C++ 代码,并且正在尝试弄清楚如何使转换更快。
这是我当前使用的代码:
string digits = "0123456789abcdef";
string tohex(string number) { // Decimal to Hexadecimal function
long length = number.length();
string result = "";
vector<long> nibbles;
for ( long i = 0; i < length; i++ ) {
nibbles.push_back(digits.find(number[i]));
}
long newlen = 0;
do {
long value = 0;
newlen = 0;
for ( long i = 0; i < length; i++ ) {
value = (value * 10) + nibbles[i];
if (value >= 16) {
nibbles[newlen++] = value / 16;
value %= 16;
} else if (newlen > 0) {
nibbles[newlen++] = 0;
};
};
length = newlen;
result = digits[value] + result;
} while (newlen != 0);
return result;
}
在我的例子(密码)中,数字总是适合一个整数,所以它可以做到:
string tohex(string number) {
int num = std::stoi(number);
std::stringstream hexnumber;
hexnumber << std::hex << num;
return hexnumber.str();
}
这样更好,因为它更简单并且使用了内置的 std::hex 方法。