位到十进制转换的集合
Collection of bits to decimal conversion
要求可能是唯一的或过时的,但谷歌的最后两个小时没有给出答案。
我有一个第三路径组件,它以二进制形式返回给我一个数据。以下是示例:
long GetMyData()
{
for(int index = 0; index < CollectionOfEntity.GetCount(); index++)
{
CString EntityName = CollectionOfEntity.GetAt(index);
BOOL returnVal;
//Get data from binary format
hr = EntityInterface->GetDataInBit(EntityName, returnVal, FALSE);
}
//Return all combine data into long.
}
我需要将"returnVal"布尔值的集合转换为"long"。
以下是例外:
- 我不想把二进制数据转换成字符串,然后把二进制字符串转换成十进制。这将在我的流程执行中造成巨大的延迟
这个解决方案怎么样?
long GetMyData() {
long result = 0;
for(int index = 0; index < CollectionOfEntity.GetCount(); index++) {
CString EntityName = CollectionOfEntity.GetAt(index);
BOOL returnVal;
//Get data from binary format
hr = EntityInterface->GetDataInBit(EntityName, returnVal, FALSE);
result |= returnVal << index; // <<<<<<<<<
}
return result;
}
假设您首先得到的是最低的位。
只要积累答案,在每一个新的比特中转换。
您可以使用算术运算符或逻辑运算符来完成此操作。逻辑运算符更干净,但算术可能更容易阅读和维护。
在这两种情况下,循环之前都有:
long result = 0;
然后,在循环中,在返回Val后,执行以下任一操作:
result = result*2 + (returnVal? 1 : 0);
或
result = result<<1 | (returnVal? 1 : 0);
一旦你理解了这一点,你就可以通过两种方式使代码更干净(但对新手来说可读性较差):
- 去掉最后一个学期周围的括号。它们是不需要的
- 将
? .. :
运算符替换为强制转换
假设您的位长度不超过一个位的大小,并且其顺序正确。这样的东西可能会起作用(未经测试)。
long GetMyData()
{
long res = 0;
for(int index = 0; index < CollectionOfEntity.GetCount(); index++)
{
CString EntityName = CollectionOfEntity.GetAt(index);
BOOL returnVal;
//Get data from binary format
hr = EntityInterface->GetDataInBit(EntityName, returnVal, FALSE);
res |= (returnVal << index);
}
//Return all combine data into long.
return res;
}
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 在 c++ 中将集合转换为向量和向量转换为字符串时出现运行时异常
- 如何使用for_each,transform,Iterator和lambda的某种组合将STD ::集合的字符串转换为小
- 在集合中转换为小写 C++ 错误 C2664
- 使用shared_ptr<字符串>转换为一个无序集合<字符串>
- 将集合转换为向量的向量
- 具有扩展接口的派生类的集合.如何在没有动态强制转换的情况下访问派生接口
- 将shared_ptr集合转换为weak_ptr集合
- 迭代 Java 集合和对元素进行一些转换的有效方法
- 位到十进制转换的集合
- 如何将地图转换为集合
- 将无理分数转换为四个适当/不适当分数的集合
- 将现有的QPushButtons集合转换为单个数组
- 将文本文件转换为 std::string 数组/集合的最佳方法是什么 C++.