STL : std::string可以当UCHAR数组用

本文详细探讨了如何在C++中利用std::string进行二进制数据的操作,包括如何将二进制数据赋值给std::string实例,并验证了其作为二进制数组使用的可行性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// testWin32Console.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include <tchar.h>
#include <string>

void fnTest();
int _tmain(int argc, _TCHAR* argv[])
{
    fnTest();

    /// run result
    /**
    strBufSrc.size() = 260
    strBufDst.size() = 260
    verify ok, std::string can use as binary array
    */

    /// 通过试验,可以看出 std::string 可以当二进制数组用

	getwchar();
	return 0;
}

void fnTest()
{
    /// 在一个工程中看到用std::string resize + memcpy 当二进制数组用
    /// 当需要赋值到另外一个string时,是采用原生的'= '操作符,还是自己拷贝呢
    /// 如果自己(resize + memcpy)拷贝的话,是可以的
    /// 如果用 '=' 操作符, 不能确定, 验证一下

    size_t      nIndex = 0;
    std::string strBufSrc = "";
    std::string strBufDst = "";
    UCHAR       uBuf[MAX_PATH] = {'\0'};

    /// 对uBuf赋值,模拟是一个二进制文件的内容
    for (nIndex = 0; nIndex < sizeof(uBuf); nIndex++)
    {
        uBuf[nIndex] = (0xff - nIndex) % 0xff;  ///< 255 ~ 1
    }

    /// 对src赋值
    strBufSrc.resize(sizeof(uBuf));
    ::memcpy((PVOID)strBufSrc.data(), uBuf, sizeof(uBuf));

    /// 用src对dst赋值
    strBufDst = strBufSrc;

    _tprintf(L"strBufSrc.size() = %d\r\n", strBufSrc.size());
    _tprintf(L"strBufDst.size() = %d\r\n", strBufDst.size());

    if (strBufDst.size() != strBufSrc.size())
    {
        _tprintf(L"verify failed, can't use std::string as binary array by \"=\"\r\n");
        return;
    }
    else
    {
        /// 逐个字节验证,看是否相同
        for (nIndex = 0; nIndex < strBufSrc.size(); nIndex++)
        {
            if (strBufSrc[nIndex] != strBufDst[nIndex])
            {
                /// failed
                _tprintf(L"failed : nIndex = %d, src char[0x%X] <=> dst char[0x%X]\r\n");
                return;
            }
        }
    }

    _tprintf(L"verify ok, std::string can use as binary array\r\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值