草庐IT

c++ - 使用 C++ 中的 UTF-16 编码文本截断读取

我的目标是将外部输入源转换为通用的UTF-8内部编码,因为它与我使用的许多库(如RE2)兼容并且紧凑。由于我不需要使用纯ASCII进行字符串切片,因此UTF-8是我的理想格式。现在,我应该能够解码的外部输入格式包括UTF-16。为了测试C++中的UTF-16(大端或小端)读取,我将一个测试UTF-8文件转换为UTF-16LE和UTF-16BE。该文件是CSV格式的简单乱码,包含许多不同的源语言(英语、法语、日语、韩语、阿拉伯语、表情符号、泰语),以创建一个相当复杂的文件:"This","佐藤幹夫","Mêmes","친구""ภควา","كيبوردللكتابةبالعربي","ウ

c++ - 为什么 C++ 编译器无法将 "if(test) --foo"优化为 "foo -= test"?

我有一个函数可以找到给定整数的下一个2的幂。如果整数是2的幂,则返回幂。非常简单:charnextpow2if(inta){charfoo=char(32-__builtin_clz(a));boolispow2=!(a&a-1);if(ispow2)--foo;returnfoo;}然而,在使用带有-O2的gcc6进行编译之后,在检查生成的程序集之后,我发现这是在计算foo-1之后用看似无用的指令cmovne编译的。更糟糕的是,对于gcc5和更早的版本,我在代码中得到了一个实际的jne分支。编译它的更快方法就像我编写了以下函数:charnextpow2sub(inta){charfo

c++ - 我不明白在下面的代码中将 char buffer[] 与 X 类型的对象对齐的原因

Stroustrup在他的新书第151页中展示了以下使用类型说明符alignas的示例:Sometimes,wehavetousealignmentinadeclaration,whereanexpression,suchasalignof(x+y)isnotallowed.Instead,wecanusethetypespecifieralignas:alignas(T)means"alignjustlikeaT."Forexample,wecansetasideuninitializedstorageforsometypeXlikethis:voiduser(constvector

c++ - 如何将函数从 C++ 类传递给 C API?

如何将动态生成的C++函数作为*funcprt传递给CAPI?API导出这个:DllImportvoidapi_register_func(char*func_name,void(*funcptr)(char*,char*));我必须在运行时创建函数,因为我之前不知道它。所以我用了一个类:classJsFunc{public:char*JsFuncName;char*JsParameter;voidRunFunc(char*val1,char*val2){printf("\nJsFunc.runFuncexecuted,JsParameter=%spassed\n",JsParamet

c++ - 从 *char 数组转换时有哪些严格的别名规则?

在将char数组转换为其他类型时,我对严格的别名规则感到困惑。我知道允许将任何对象转换为char数组,但我不确定反过来会发生什么。看看这个:#includeusingnamespacestd;struct{alignas(int)charbuf[sizeof(int)];//correct?}buf1;alignas(int)charbuf2[sizeof(int)];//incorrect?struct{floatf;//obviouslyincorrect}buf3;typenamestd::aligned_storage::typebuf4;//obviouslycorrecti

c++ - 如何使用 C/C++ 生成网络数据包

我想生成一个网络数据包以通过(例如)端口123发送到NTP服务器,以便我可以接收和解析返回的数据包。目标是更好地了解网络系统如何生成、读取和回复数据包。(1)是否应该使用结构体来生成数据包?(2)我不确定如何正确填充结构中的各个字段;例如,源IP地址和目标IP地址是否应该设置为十六进制值?还是有更人性化的方式?(3)然后,一旦填充了字段,是否可以通过UDP连接通过send()/write()将结构发送到NTP服务器?(或TCP,如果协议(protocol)要求的话)我的做法合理吗?我一直在阅读NTPRFC,但我仍然不确定我的客户端应该向服务器发送什么(例如IP地址;这不应该由网络层he

c++ - 显示字符名称 C++ 的标准解决方案?

对于非字母输入字符的用户友好表示是否有标准函数?假设char(27)将是“ESC”或“Escape”或类似的东西。我问这个是因为这对我来说是一种在命令行中显示控件帮助的简单方法。编辑:正如@ypnos所指出的:问题是如何避免定义我自己的键名。我想知道boost或std中是否有我错过的功能或一些基本库?目前,Ascii-only可以为我工作,但我正在寻找一个“标准”解决方案,因为我不想在处理Unicode输入后重新实现——比如带有重音符号的字符不在Ascii中——稍后。我的程序代码将被发送到Linux和Windows,我也不希望名称在某些地方出现错误。 最佳答

c++ - 重复符号链接(symbolic link)器错误(C++ 帮助)

我现在正在学习一些CSP(约束满足)理论,并且正在使用this解析XML文件的库。我将Xcode用作IDE。我的程序编译正常,但当它链接文件时,我收到XMLParser_libxml2.hh文件的重复符号错误。我的文件是这样分开的:包含上述XMLParser文件的类头文件包含类头文件的类实现文件包含类头文件的主文件重复符号出现在main.o和classfile.o中,但据我所知,我实际上并没有两次添加该.hh文件。完整错误:ld:duplicatesymbolboolCSPXMLParser::UTF8String::to,std::allocator>>(std::basic_str

c++ - 是否可以创建一个静态库(单个 .lib 文件),稍后可以使用/MT、/MTd、/MD 或/MDd 进行编译?

我不想创建4个不同的库(一个用于MT,MTd,MD,MDd),而是想创建一个未指定其对C运行时库(CRT)的依赖性的库。我尝试将“/c/Zl”选项传递给vc10编译器,然后将/NODEFAULTLIB传递给lib命令。稍后当我使用这样的库时,当我使用不同于默认/MT的开关编译我的程序时,我仍然有错误。例如/MD这里有几个第一个错误:msvcprt.lib(MSVCP100.dll):errorLNK2005:"public:classstd::basic_ostream>&__thiscallstd::basic_ostream>::operator>&(__cdecl*)(class

c# - 如何将带有 const char* 的 C union 映射到 C# 结构?

在本地库的回调函数中,我需要访问一个espeak_EVENT数组。问题出在原C代码中的UNION语句:typedefstruct{espeak_EVENT_TYPEtype;unsignedintunique_identifier;//messageidentifier(or0forkeyorcharacter)inttext_position;//thenumberofcharactersfromthestartofthetextintlength;//wordlength,incharacters(forespeakEVENT_WORD)intaudio_position;//th