首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++:包含十六进制值的格式字符串

C++:包含十六进制值的格式字符串
EN

Stack Overflow用户
提问于 2018-07-26 06:54:38
回答 2查看 758关注 0票数 1

在Visual Studio2010上使用C++。

尝试提出一个健壮的函数,该函数将十六进制值作为字符串,将大小作为整数,然后输出格式化的十六进制值。

例如,

如果输入字符串为"A2“且大小为1,则输出为"0xA2”

如果输入字符串为"800“,大小为2,则输出为"0x0800”

如果输入字符串为"DEF“且大小为4,则输出为"0x00000DEF”

如果输入字符串为"00775“,大小为4,则输出为"0x00000775”

如果输入字符串为"FB600“,大小为3,则输出为"0x0FB600”

基本思想是,将大小乘以2,如果字符串长度小于2,则将前导零添加到十六进制值,然后将其附加"0x“。

无论是否添加了前导零,都会追加"0x“。

正如你在第一个例子中看到的,没有要添加的零,因为字符串已经包含了2个字符。

我想出了下面的函数,但它有内存损坏。此外,当我试图通过调用这个函数来处理大量数据时,它会崩溃。似乎我的逻辑中有内存漏洞。

所以我希望有人能想出一个健壮的智能代码来实现这个功能。

我尝试过的东西:

代码语言:javascript
运行
复制
void formatHexString(char* inputHex, int size, char* outputFormattedHex)
{
    int len = size * 2;
    int diff = len - strlen(inputHex);
    char * tempHex = new char [diff + 2]; //"2" is for holding "0x"
    tempHex[0] = '0';
    tempHex[1] = 'x';

    if (len > strlen(inputHex))
    {

        for (int i = 2; i < ((len - strlen(inputHex)) + 2); i++)
        {
            tempHex[i] = '0';

        }

    }

    strcat(tempHex, inputHex);
    sprintf(outputFormattedHex, "%s", tempHex);

    delete [] tempHex;

    cout <<outputFormattedHex <<endl;
}


int main 
{
    char bbb1[24];
    formatHexString("23", 1, bbb1);
    char bbb2[24];
    formatHexString("A3", 2, bbb2);
    char bbb3[24];
    formatHexString("0AA23", 4, bbb3);
    char bbb4[24];
    formatHexString("7723", 4, bbb4);
    char bbb5[24];
    formatHexString("AA023", 4, bbb5);
    return 0;
}

更新:

我无法修改原始函数的参数,因为此函数是从不同的应用程序调用的。所以我用你的代码修改了我的原始函数,但这不起作用。有什么想法吗?

代码语言:javascript
运行
复制
void formatHexString(char* inputHex, int size, char* outputFormattedHex)
{
    string input(inputHex);
    std::size_t const input_len(input.length());

    if (!size || (size * 2 < input_len))
        size = input_len / 2 + input_len % 2;

    std::stringstream ss;
    ss << "0x" << std::setw(2 * size) << std::setfill('0') << input;
    sprintf(outputFormattedHex, "%s", ss.str());
}
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51528751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档