gpt4 book ai didi

c++ - 以十六进制表示位串的最佳实践(Arduino)

转载 作者:行者123 更新时间:2023-11-30 18:30:58 33 4
gpt4 key购买 nike

我有一个由 24 位“000101011110011110101110”组成的字符串(或 cstring),应以十六进制表示(0x15e7ae)。

据我了解,位串需要按 4 位分为 6 个部分“0001 0101 1110 0111 1010 1110”然后将每个部分转换为十六进制

0001 -> 1
0101 -> 5
1110 -> e
0111 -> 7
1010 -> a
1110 -> e

那么将其转换为十六进制表示形式的最简单且经济高效的方法是什么:0x15e7ae?

我还面临着一个难题,即使用 String 或 char[] 哪种字符串类型更好。使用 substring 函数可以轻松分割字符串,但我不知道如何将字符串类型转换为十六进制。

相反 char[] 可以使用 strtoul 函数轻松转换为十六进制,但我没有找到分割字符字符串的简单方法。

最佳答案

让我们尝试一些简单的位移。

std::string sample_str = "000101011110011110101110";
uint32_t result = 0;
for (unsigned int i = 0; i < sample_str.length(); ++i)
{
result = result << 1;
result = result | (sample_str[i] & 1);
}

可能有更快的方法,但您必须在网络上搜索“bit twiddling string”。

背景
这是基于这样的假设:零的字符表示的最低有效位设置为零。同样,1 的字符表示形式的最低有效位设置为 1。

算法将结果左移一位,为新的位值腾出空间。将字符值与 1 进行“与”运算,结果“0”的值为零,“1”的值 1。将此结果与 result 值进行或运算,以生成正确的值。

尝试使用调试器单步执行,看看它是如何工作的。

关于c++ - 以十六进制表示位串的最佳实践(Arduino),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27760302/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com