gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:27:46 26 4
gpt4 key购买 nike

我的目标:我正在Visual Studio 2015中使用MFC构建应用程序。我创建了一个包含两列的表,其中包含许多寄存器的数字和值,如下所示:
enter image description here
为了方便地填充此表,我想创建一个for循环,该循环会将LPCSTR字符串(自动解释为const char)发送到CListCtrl类的成员函数InsertItem。我希望这个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, 0, buffer, 0, LVIS_SELECTED, 0, 0);
m_EditableList.SetItemText(l_iItem, 1, "00000000");
我已经看到了许多与此主题有关的问题,但是几乎所有问题都提出了解决此问题的方法,该方法仅在我希望将数字打印到标准输出,但我想将其打印到char类型变量时才适用。好说在评论)。如果有人能推荐我使用适当的功能,我将不胜感激。
谢谢。
================================================== ========================
正如Tushar所建议的那样,我尝试添加这些 header :
#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();
尽管包含了所有必需的 header ,但我遇到了相同的错误。可能是什么问题呢?

最佳答案

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';
}

关于c++ - 字符代表前缀 '0x0'的int十六进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63555730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com