如何使用lambda表达式更改代码

How to change the code using lambda expression?

本文关键字:代码 表达式 何使用 lambda      更新时间:2023-10-16

我正在学习使用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());
});

&意味着您将参照szBsRet操作,而不是对它们的副本操作。