微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

字符代表前缀为'0x0'的int十六进制数字

如何解决字符代表前缀为'0x0'的int十六进制数字

我的目标:我正在Visual Studio 2015中使用MFC构建应用程序。我创建了一个包含两列的表,其中包含许多寄存器的数字和值,如下所示:>

enter image description here

为了方便地填充此表,我想创建一个for循环,该循环会将LPCSTR字符串(自动解释为const char)发送给名为InsertItem的CListCtrl类的成员函数。我希望这个LPCSTR字符串看起来像十六进制数字0x01或0x14,而前缀0x之后的值将由十六进制基循环的索引确定。例如:


char buffer[3*sizeof(int)];
int l_iItem;
for (int index = REGS_NUMBER; index >= 0; index--) {
        // Somehow make buffer look like 0xN when N is the index value in hex representation stuffed with 
        // zeroes if needed;
        l_iItem = m_EditableList.InsertItem(LVIF_TEXT | LVIF_STATE,buffer,LVIS_SELECTED,0);
        m_EditableList.SetItemText(l_iItem,1,"00000000");

我已经看到了很多与此主题有关的问题,但是几乎所有问题都提出了一种解决此问题的方法,该方法仅在我要将数字打印到标准输出,但我想将其打印到char类型变量时才适用(正如评论中所说的那样)。如果有人能推荐我使用适当的功能,我将不胜感激。

谢谢。

================================================ ==========================

按照Tushar的建议,我尝试添加这些标头:

#include <iostream>
#include <sstream>
#include <iomanip>

并尝试运行以下代码

    char* n;
    
    int i = 7;
    //std::istringstream s("2A");


    n << std::hex << std::showbase << i;

    std::cout << n;

我得到的错误

expression must have integral or unscoped enum.
'hex' is not a member of std.
'showbase' is not a member of std.
undeclared identifier.
undeclared identifier.

一个试验:正如他的评论所建议,我尝试使用ostringstream代替char *,如下所示:

    std::ostringstream ss;
    int i = 7;
    ss << std::hex << std::showbase << i;

    std::string str = ss.str();
    const char *output = str.c_str();

尽管包含了所有必需的标头,但我遇到了相同的错误。可能是什么问题?

解决方法

ios_base&hex(ios_base&str);

它用于将str流的基域格式标志设置为十六进制。当basefield设置为十六进制时,插入流中的整数值以十六进制表示(即基数16)。对于输入流,设置此标志后,提取的值也应以十六进制表示。

如果要以十六进制为基础解析字符串

std :: istringstream(“ 2A”)>> std :: hex >> n;

使用十六进制基数的示例。

#include <iostream>
#include <sstream>
#include <iomanip>
int main()
{
    std::cout << "Parsing string \"10 0x10 010\"\n";
 
    int n1,n2,n3;
    std::istringstream s("10 0x10 010");
    s >> std::setbase(16) >> n1 >> n2 >> n3;
    std::cout << "hexadecimal parse: " << n1 << ' ' << n2 << ' ' << n3 << '\n';
     s >> std::setbase(0) >> n1 >> n2 >> n3;
    std::cout << "prefix-dependent parse: " << n1 << ' ' << n2 << ' ' << n3 << '\n';
 
    std::cout << "hex output: " << std::setbase(16)
              << std::showbase << n1 << ' ' << n2 << ' ' << n3 << '\n';
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。