如何使用lambda表达式更改代码
How to change the code using lambda expression?
我正在学习使用lambda表达式的c++。我只是试图改变已经编码的代码使用或一段时间,然后我有关于lambda的问题。
我只是改变代码使用lambda或for_each (c++11)。如何改变?
这是一段需要修改的代码。
std::string PointToString(void* p_pData)
{
char* p = (char*)p_pData;
int iLength = 0;
std::memcpy(&iLength, p, sizeof(int));
p += sizeof(int);
std::string sRet;
std::array<char, 3> szB;
sRet.append("0x");
for ( int i = 0; i < iLength; i++ )
{
sprintf(szB.data(), "%02X", (unsigned char)*(p++));
sRet.append(szB.data());
}
return sRet;
}
这个代码只是将内存值转换为十六进制代码。这个函数是这样调用的
char szB[15] = {0x0b, 0x00, 0x00, 0x00, 0xc7, 0xd1, 0xb1, 0xdb, 0xc0, 0xd4, 0xb4, 0xcf, 0xb4, 0xd9, 0x2e};
void* p = nullptr;
p = (void*)szB;
sRet = PointToString(p);
结果可能为0x0B000000C7D1.....
我想尝试lambda在PointToString函数。如何改变这个函数?
你可以这样写:
std::for_each(p, p + iLength, [&](unsigned char ch)
{
sprintf(szB.data(), "%02X", ch);
sRet.append(szB.data());
});
&
意味着您将参照szB
和sRet
操作,而不是对它们的副本操作。
相关文章:
- 编写了一个C++代码来检查表达式是否具有平衡括号并且我的代码未运行.我已经卡了一天了
- 错误:'int'之前的预期主表达式以及代码中的许多类似错误
- C++:正则表达式匹配代码,打印多个匹配项?
- 代码样式:在 switch/if 语句的分支中重用控件表达式或控制变量
- 正则表达式代码无缘无故停止工作
- 如何构建包含C 11的恒定表达式的代码
- 我可以进一步简化此代码/表达式吗?
- 正则表达式C 代码
- 正则表达式捕获会使代码崩溃
- 我在C++文件中的简单代码块上有 2 个错误。错误 C2059:语法错误:"?"。第二智能感知:预期表达式。怎么了?
- Lambda 表达式等效于 C++ 代码
- 中缀到后缀表达式转换代码不起作用
- 将使用正则表达式缩短/美化代码重写它
- 在编写gawk代码时区分除法和正则表达式
- 代码块引发有关for_each的预期主表达式错误
- 我的代码出现错误:错误:“”之前应为主表达式代币
- 如何使用表达式命名 int,以便代码将生成给定数量的整数并命名它们 (c++)
- 是否可以构造与 3 个或更多非连续 UTF 代码点匹配的 PCRE UTF-8 正则表达式
- 为什么使用"cmatch"的C++正则表达式代码会引发"smatch"异常?
- 表达式模板与手写代码