如何解决字符代表前缀为'0x0'的int十六进制数字
我的目标:我正在Visual Studio 2015中使用MFC构建应用程序。我创建了一个包含两列的表,其中包含许多寄存器的数字和值,如下所示:>
为了方便地填充此表,我想创建一个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 举报,一经查实,本站将立刻删除。