草庐IT

char_length

全部标签

c++ - reinterpret_cast<int*>(char*) 与 static_cast<int*>(static_cast<void*>(char*)) - 使用哪个?

当你动态分配了一个char*类型的缓冲区并想将它转换为特定类型时,你是否应该使用类似的东西reinterpret_cast(char*)或者类似的东西static_cast(static_cast(char*))为什么?我个人很想使用后者,因为对我来说,它并不是真正的数据“重新解释”(而只是一种分配缓冲区的机械方式)而且它看起来不像是一个来源错误的方式可能与典型的reinterpret_cast相同,但这是正确的直觉吗? 最佳答案 AccordingtoDaveAbrahams,使用链式static_casts是强制指针类型的正确、

c++ - 如何将 char 数组解析为整数?

我有一个像这样的char数组的缓冲区:charbuf[4];buf[0]=0x82;buf[1]=0x7e;buf[2]=0x01;buf[3]=0x00;我现在想将char2和3一起读取为bigendian中的16位无符号整数。如何使用C(++)标准工具执行此操作?目前我只会知道手动解决方案:intlength=but[3];length+=but[2]这对于16位整数来说很容易,但我还需要解析32位整数,这会使事情变得有点困难。那么标准库中是否有一个函数可以为我做这件事?博多 最佳答案 您可以使用ntohs和ntohl(在小端系

char 类型的 C++ 枚举,被编译器忽略或意外行为?

我用枚举做了一个小测试,这是我拥有的:enumanyoldname:char{aa='a',ab='b',ac='c',ad='d'};intmain(){anyoldnamei_have_an_enum_here=aa;//Wouldexpecti_have_an_enum_heretobeoftypechar?std::cout输出是:98,除非我像这样显式转换为char:std::cout或者将anyoldname改为char。为什么打印的是98而不是b?顺便说一句,sizeof()返回1,即;1个字节,一个char。 最佳答案

c++ - 使用带有 char * 的正则表达式迭代器

我正在尝试将文件读入缓冲区,然后使用正则表达式迭代器。我知道我可以将C++字符串迭代器与正则表达式迭代器一起使用(构造函数是std::regex_iterator),但我想避免将缓冲区复制到字符串中并继续使用低级函数来读取文件(现在我使用open()和read())。structstatbuff;intfile=open(argv[1],O_RDONLY);if(!file)cout我认为我的选择是找到一种使用read()的方法使用C++字符串而不是char*或在char数组上使用正则表达式迭代器的方法。我可以写一个,但我也在努力让我的程序尽可能小。有什么办法可以做到吗?如何将C++字

c++ - string s怎么改成char * a[]?

我要转型字符串s="aaa,bbb,ccc"进入:char*a[]={"aaa","bbb","ccc"}你能帮我编写程序来处理这个过程吗?我会尝试这样编程:strings="aaa,bbb,ccc";char*a[];charid[]="";strcpy(id,s.c_str());constchar*split=",";char*p;p=strtok(id,split);while(p!=NULL){inti=0;printf("%s\n",p);a[i]=p;i++;p=strtok(NULL,split);}我哪里错了?谁能指点一下? 最佳答案

c++ - 创建一个字符串如何改变 const char* 指向的值?

我编写了一个函数,它接受一个字符串并返回一个constchar*,其中包含该字符串的编码版本。我调用这个函数,然后创建一个新的字符串。这样做时,我无意中更改了指向我的constchar*的值,我认为这是不可能的。但是,当我不使用我自己的函数,而只是将一个值硬编码到我的constchar数组中时,当我创建一个字符串时该值不会改变。为什么这里有区别,为什么我仍然能够更改constchar数组的值?#include#include#include#include#includeusingnamespacestd;//returns"@username@FIN"constchar*encode

c++ - `reinterpret_cast<char*>(reinterpret_cast<uintptr_t>(&ch) + 1) == &ch +1` 有保证吗?

我正在编写与对齐相关的代码,如果给定的指针正确对齐,却没有标准的功能测试,这让我感到非常惊讶。似乎互联网上的大多数代码都使用(long)ptr或reinterpret_cast(ptr)测试对齐,我也使用了它们,但我想知道使用指向整数类型的强制转换指针是否符合标准。这里是否有任何系统触发断言?charch[2];assert(reinterpret_cast(reinterpret_cast(&ch[0])+1)==&ch[1]); 最佳答案 回答题目中的问题:没有。反例:在旧的Pr1me微型计算机上,一个普通指针是两个16位字。第

c++ - 为什么我不能在 struct 中初始化 char 数组

我尝试通过以下方式在结构声明中初始化一个char数组。但它无法编译并显示错误消息。请告诉我为什么它无法编译。#includestructA{constcharvalue_in_struct[]="a";//thislinegivesmeaerrormessage.};voidt(void){constcharvalue[]="a";//thislinewasokatcompilingstd::cout我从gcc收到以下错误消息。../static_constexpr_array.hpp:16:33:error:initializer-stringforarrayofcharsistoo

c++ - 为什么 C++ char 数据类型 3d array 当传递参数第一个括号为空时

请看下面的代码:#includeusingnamespacestd;intmain(){charmatrix[2][2][2];return0;}intgetMatrixData(charmatrix[][2][2],intx,inty,intz){returnmatrix[x][y][z];}矩阵3d数组作为参数传入函数时,为什么不指定第一个[]大小就可以了?如何解释这个缺失的维度? 最佳答案 您的代码在语法上不正确。假设您的意思是intgetMatrixData(charmatrix[][2][2],intx,inty,intz

c++ - const char * 与其他指针不同吗?

这个问题在这里已经有了答案:Whydoescoutprintchararraysdifferentlyfromotherarrays?(4个答案)关闭4年前。所以我最近一直在深入研究指针和引用,因为它们经常出现在我用来学习OpenGL的资源中。我注意到constchar*指针的行为似乎与其他指针有些不同。为了演示,我创建了这个测试程序:#includeintmain(){inti=2;int*pi;//constcharc="helloworld";constchar*pc="helloworld";pi=&i;std::cout输出:'helloworld'typeischarcon