草庐IT

c++ - 为什么 windows GDI 对 `COLORREF` 使用 RGBA 格式而不是 BGRA?

MSDNstates:WhenspecifyinganexplicitRGBcolor,theCOLORREFvaluehasthefollowinghexadecimalform:0x00bbggrrThelow-orderbytecontainsavaluefortherelativeintensityofred;thesecondbytecontainsavalueforgreen;andthethirdbytecontainsavalueforblue.Thehigh-orderbytemustbezero.Themaximumvalueforasinglebyteis0xFF

c++ - 访问冲突读取位置-未终止的字符串(不可读的内存)

我正在使用log4cplus库,但无法使日志记录正常工作。我使用这段代码:PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log.properties"));Loggerg_logger=Logger::getInstance(LOG4CPLUS_TEXT("mylogger"));LOG4CPLUS_WARN(g_logger,LOG4CPLUS_TEXT("testtesttest"));它在LOG4CPLUS_WARN处中断并出现错误:访问违规读取位置这是我的调用栈:msvcp110d.dll!std::basic_stream

c++ - 从函数内部获取函数名称和参数值的宏

我正在开发一个调试/日志程序,想知道是否可以创建一个宏,我可以将其粘贴到每个函数中,并且它会在每次调用函数时打印函数名称和参数值。函数名可以在编译时解析,问题是如何打印参数值?更新:我记得读过一篇获取参数的文章,但其中涉及汇编代码和操作堆栈指针,这不是跨平台兼容的——这是我需要的。 最佳答案 您可以使用__FUNCTION__或__func__宏作为函数名称。对于参数,我认为没有内置的宏来实现这一点。其他有用的宏是__LINE__和__FILE__。编辑:__FUNCTION__和__func__不是标准的一部分,但它们受到广泛支持

c++ - std::strftime 的返回值

我想我在某处读到,如果我将nullptr传递给std::strftime,该函数将返回所需的缓冲区大小。事实上,下面的代码在我试过的许多linux系统上运行得非常好(虽然不是用VS编译时):#include#include#includeintmain(){std::time_ttime{};std::tmconst*ltime=std::localtime(&time);constchar*formatString="%Y-%b-%d";//allocatebufferofappropriatesizeautorequiredSize=1+std::strftime(nullptr,

c++ - 如何从 uint32_t 打印十六进制?

我一直在处理的代码要求我以十六进制打印类型为uint32_t的变量,填充为0,最小长度为8。到目前为止,我一直在使用该代码来执行此操作是:printf("%08lx\n",read_word(address));其中read_word返回类型uint32_t。我用过jx,llx等格式都没有用,请问有正确的格式可以用吗?编辑:我发现问题出在我传递的内容上。函数read_word从uint32_tvector返回一个值。似乎这是导致十六进制问题的问题。这是按引用/值传递的问题吗?如何解决?读字函数:uint32_tmemory::read_word(uint32_taddress){if(

c++ - C stdio 字符编码

对于我的宠物项目,我正在试验字符串表示,但我得出了一些令人不安的结果。首先,这是一个简短的应用程序:#include#include#includevoidwrite_to_file(FILE*fp,constchar*c,size_tlen){void*t=(void*)c;fwrite(&len,sizeof(size_t),1,fp);fwrite(t,len,sizeof(char),fp);}intmain(){FILE*fp=fopen("test.cod","wb+");constchar*ABCDE="ABCDE";write_to_file(fp,ABCDE,strl

用普通 C 实现的 C++

这个问题在这里已经有了答案:HowtoconvertC++CodetoC[closed](6个答案)关闭9年前。我多次读到,早期的C++编译器在编译之前先将C++代码翻译成纯C(或者可能需要第三方C编译器)。在语法/语言/编译领域玩弄自己,我很好奇C++是如何在普通C中实现的,尤其是实现类继承和[虚拟]方法调用的一种方法。你能告诉我这样一个现在仍然可用的编译器吗?我知道OO代码可以使用结构和函数指针在纯C中模拟/仿真,但我希望看到C++语言在C中的实际实现。

C++ IP 地址人类可读形式

在C/C++中,您可以使用常规的gethostbyname()调用将点分IP地址字符串(在本地主机的情况下为“127.0.0.1”)转换为适合标准套接字调用的结构。现在如何将其翻译回来?我知道我可以做一些位移来准确地获得我想要的位集并将它们打印出来,但是有没有任何“标准”功能可以为我做这件事?它用于输出到日志文件中,以便我“真正”知道我正在连接谁/什么,因此人类可读的点分地址比原始十六进制好得多。谢谢。 最佳答案 首先,在新代码中,您通常应该更喜欢使用getaddrinfo()而不是gethostbyname(),后者既旧又笨重,很

c++ - 一些随机的 C 问题(ascii 魔法和位运算符)

我正在尝试学习C编程,我正在研究一些源代码,但有些东西我不明白,尤其是关于位运算符。我阅读了一些关于此的网站,我对它们的作用有了一些了解,但是当我回头查看这些代码时,我无法理解它们使用的原因和方式。我的第一个问题与按位运算符无关,而是一些ascii魔术:谁能给我解释一下下面的代码是如何工作的?chara=3;intx=a-'0';我知道这样做是为了将char转换为int,但我不明白其背后的逻辑。为什么/如何运作?现在,关于按位运算符,我真的迷失在这里。这段代码是做什么的?if(~pointer->intX&(1我在某处读到~反转位,但我看不出这条语句在做什么以及为什么要这样做。与此行相

c++ - 如何使用 ANSI Escape 代码在控制台上输出彩色文本

我读到了ANSI-C转义码here.尝试在C/C++printf/cout中使用它来为输出到consolde的文本着色,但没有成功。代码:#include#includeintmain(){inta=3,b=5;int&ref=a;ref=b;//cout如何使用这些转义码将彩色文本输出到控制台?我错过了什么吗?编辑:在一些C++代码中,我看到了对这个函数的调用textcolor(10);但它在g++和VisualStudio中给出了编译错误。哪个编译器有这个功能?有详细信息吗? 最佳答案 恐怕你忘记了ESC字符:#includei