我想将四个字符串text
转换为32位整数number
,例如四个空格字符串应返回0x20202020。所有字符串元素均为ASCII。我知道像这样的作品
number = ord(text[0]) << 24 | ord(text[1]) << 16 | ord(text[2]) << 8 | ord(text[3]) << 0
但是它很慢而且效率很低。有没有更快的方法?
编辑:这是算法的一部分,旨在通过C / Assembler脚本将字符串发送到LCD显示。字符串必须分成包含每个代表四个字符的数字的列表。
致谢。
答案 0 :(得分:4)
您可以使用text => bytes => int:
using data = std::tuple<double, double, double>;
void matrix_mul3x1(const data& A, const data& B, data& C)
{
std::get<0>(C) = std::get<0>(A) * std::get<0>(B) ...;
// ....
}
快速时间比较:
int.from_bytes(text.encode(),'big')
输出:
import timeit
print(timeit.timeit("int.from_bytes(text.encode(),'big')","text = 'abcd'"))
print(timeit.timeit("ord(text[0]) << 24 | ord(text[1]) << 16 | ord(text[2]) << 8 | ord(text[3]) << 0","text = 'abcd'"))
因此,看来0.21847990699999997
0.4186516309999999
的速度大约是显式位移的两倍。