草庐IT

CHAR_BIT

全部标签

c++ - printf int 到带有左填充空格的 char 数组

我有一点脑死亡的时刻。我必须将int的字符串表示形式存储到char[]中,但ascii表示形式必须用空格填充。snprintf将完成这项工作。chardata[6];intmsg_len=10;std::snprintf(data,6,"%*d",5,msg_len);//"10"我只是想知道是否有更优雅的方法来做到这一点。我可以访问C++11还有一点问题,我认为snprintf也会添加一个终止符,我必须避免这种情况。我可以有一个中间缓冲区并将其复制到我的数据中,但这会增加额外的复杂性。我需要就地进行,因为这些数据结构是我必须发送到接受这种格式输入的服务器的消息的一部分。消息看起来像:

c++ - 模板递归中的非类型模板参数缩小

我有以下代码,它应该在编译时计算一个字节中的位数。templatestructchar_bit{staticconstexprsize_tget()noexcept{returnc>0?char_bit::get():I}};intmain(){std::cout::get();}通过将1传递给unsignedchar参数,我期望得到最终结果8,因为它将向左移动8次,直到char变为0.但是,使用Clang3.7.1编译时,出现编译错误:error:non-typetemplateargumentevaluatesto256,whichcannotbenarrowedtotype'un

c++ - 将 std::shared_ptr<char> 转换为 std::shared_ptr<unsigned char>

有什么好的方法可以将shared_ptr转换为shared_ptr吗?我想到了以下但它看起来不是很干净。intmain(intargc,char**argv){std::shared_ptrp1=std::make_shared();std::shared_ptrp2=std::shared_ptr(reinterpret_cast(p1.get()),[p1](unsignedchar*){});} 最佳答案 你正在做的事情有一个现成的功能,reinterpret_pointer_cast:std::shared_ptrp2=st

c++ - 从 C++ 中的字符串文字返回 const char*?

这个问题在这里已经有了答案:Howlongdoesastringconstantliveinc++?(1个回答)关闭5年前。通常,我会从函数返回一个std::string,因为返回一个constchar*需要调用者提供一个输出内存缓冲区,而那个缓冲区不可调整大小。但是,如果返回一个constchar*是否有效,如果它来自字符串文字?constchar*generate_c_string(){return"ABC";}这样做(如果有效)可能会更快,因为我不需要动态分配内存来构造std::string。它可能是有效的,因为constchar*x="ABC";是有效的。是否有来自C++标准的

c++ - char[](c-string) 的初始化标准

考虑以下代码:intmain(){charhi[5]="Hi!";printf("%d",hi[4]);}将打印什么?更重要的是,在最新C++标准中,标准中是否提及将打印的内容?如果有提及,它在哪里?由于某种原因,很难找到关于此的最新信息,而且各种来源的信息相互矛盾。我试过en.cppreference.com和cplusplus.com,前者没有任何信息,后者声称值未确定。然而,usingnamespacestd;intmain(){charmySt[1000000]="Hi!";for(inti=0;i这在我的系统上只打印0、1和2,所以我希望“rest”被初始化为“\0”。另外据

C++ 自动类型转换为 std::string 和 char* 的区别

作为学习练习,我一直在研究C++中的自动类型转换是如何工作的。我知道通常应该避免自动类型转换,但我还是想通过了解它的工作原理来增加我对C++的了解。我已经创建了一个可以自动转换为std::string的StdStringConverter类,但是编译器(Debian上的g++4.3.4)似乎没有这样做将对象与真实的std::string进行比较时的转换(请忽略缺少按引用传递和不必要地创建临时对象的情况):#includeclassStdStringConverter{public:explicitStdStringConverter(std::stringname):m_name(na

c++ - 将 size_t 转换为 int 以声明 char 数组的大小

我正在尝试声明一个char数组的大小,我需要使用声明为size_t的变量的值来声明该大小。无论如何我可以将size_t变量转换为int以便我可以这样做吗? 最佳答案 size_t是一个整数类型,不需要转换。在C++中,如果您想拥有一个动态大小数组,您需要使用new来使用动态分配。也就是说,您不能使用:std::size_tsz=42;charcarray[sz];您需要改用以下内容:std::size_tsz=42;char*carray=newchar[sz];//...andlater,whenyouaredonewiththe

c++ - Boost::GIL 如何将图像保存为 JPEG 或 PNG 到 char*?

所以我看到了关于保存到文件中的示例。但我想知道是否可以将其保存到char*或字符串而不是文件中-也就是说将其保存在内存中? 最佳答案 似乎没有任何东西可以boostboost本身。所有I/O似乎都基于提供文件名。不过好像有个扩展名here称为io_new,它具有基于流的I/O。参见文档here举个例子(搜索“读写内存缓冲区”)。 关于c++-Boost::GIL如何将图像保存为JPEG或PNG到char*?,我们在StackOverflow上找到一个类似的问题:

c++ - 在设备上的线性内存中循环二维数组时将 float* 转换为 char*

在CUDA4.0编程指南的第21页有一个示例(下面给出)来说明循环遍历设备内存中二维float组的元素。2D的尺寸是width*height//Hostcodeintwidth=64,height=64;float*devPtr;size_tpitch;cudaMallocPitch(&devPtr,&pitch,width*sizeof(float),height);MyKernel>>(devPtr,pitch,width,height);//Devicecode__global__voidMyKernel(float*devPtr,size_tpitch,intwidth,int

c++函数参数char指针和字符串

voidcallme(stringa){cout为什么char*会被调用?为什么当我注释掉带有char*参数的函数时,会调用另一个函数? 最佳答案 那是因为"ASDADS"可以转换为char*。因此,编译器会为它可以匹配参数的第一个函数生成代码。如果您使用char*删除原型(prototype),编译器将查找接受参数的函数,该参数具有从char*到参数类型的隐式转换。以下面为例:classA{public:A(){}A(intx){}};//voidfoo(intx){}voidfoo(Ax){}intmain(intargc,ch