开发在线装机项目时一个小需求,由于wimlib-imagex备份系统或者追加备份时,不允许中文字符串作为系统名(wim中的name字段)和 备注名(Description字段),所以萌生了一个想法将字符串转成16进制字符串然后作为wim的name和Description写入,如果需要读取在界面显示时,再将16进制字符串取出,转换成正真的中文字符,为了验证我的想法的正确性,分析了一下竞品软件的系统增量备份功能,跟我的思路差不多,所以就按照这个思路来实现
首先我们要将字符串转成16进制的形式之前,先封装一个函数,用来格式化字符串的,
std::wstring util::format(const wchar_t * fmt, ...)
{
std::wstring ret_str = L"";
if (nullptr != fmt)
{
va_list marker = nullptr;
va_start(marker, fmt); //初始化变量参数
size_t nLength = _vscwprintf(fmt, marker) + 1; //获取格式化字符串长度
std::vector buff(nLength, L' '); //创建用于存储格式化字符串的字符数组
int nWritten = _vsnwprintf_s(&buff[0], buff.size(), nLength, fmt, marker);
if (nWritten > 0)
{
ret_str = &buff[0];
}
va_end(marker); //重置变量参 


