草庐IT

c++ - 使用 char 二进制会带来意想不到的结果

我有文件,我从哪里读取第一个字符-意思是前8位。这正是我想要的。我的代码:charcontent;char*pcontent=&content;src_f.read(pcontent,1);cout但是:我确实理解-62。整数可以存储负值,但是4294967234是从哪里来的?我希望一些小于256的正数(因为最多8位..)。你能帮我澄清一下吗?谢谢! 最佳答案 当您将内容变量转换为(int)或(unsignedint)时,您将其转换为32位宽的数据类型。因此,您正在读取的字节(在二进制中似乎等于11000010)变为11111111

c++ - 将 int 数据存储和读取到 char 数组中

我正在尝试将两个整数值存储到C++中的一个字符数组中。这是代码..chardata[20];*data=static_cast(time_delay);//time_delayisofinttype*(data+sizeof(int))=static_cast(wakeup_code);//wakeup_codeisofinttype现在在程序的另一端,我想反转这个操作。也就是说,我需要从这个char数组中获取time_delay和wakeup_code的值。我该怎么做?谢谢,尼克P.S:我知道这是一种愚蠢的做法,但请相信我这是一种限制。 最佳答案

c++ - 将 fpos_t 转换为 int 或 char

我正在使用一个对文件长度使用位运算的函数:fpos_tflen;当我尝试将其转换为int或char,或尝试对其进行算术运算时,它失败并出现以下编译错误:错误:在需要整数的地方使用了聚合值 最佳答案 您在滥用该类型。首先,它不代表长度。它代表一个位置。其次,它仅用于调用fsetpos。您不打算对其进行算术运算,因为它不一定代表数字类型。它包含您的库执行fsetpos操作所需的任何信息。在您的库的实现中,fpos_t似乎是一种聚合类型,例如结构。(您可以检查头文件中的定义以确保确定,但不要依赖您在那里发现的任何内容;它可能会在其他平台或

c++ - 将动态大小的数据读入 char*?

我想知道下面的代码是如何工作的。#includeusingnamespacestd;intmain(){char*buffer=newchar(NULL);while(true){cin>>buffer;cout我可以输入任意数量任意大小的文本,它会打印出来给我。这是如何运作的?它是否为我动态分配空间?此外,如果我输入空格,它会在新行上打印下一段文本。然而,这可以通过使用gets(buffer);(不安全)来解决。此外,此代码“合法”吗? 最佳答案 一点都不安全。它正在重写缓冲区之后的任何内存,然后读取它。这有效的事实是巧合。这是因

c++ - 从另一个函数获取 char[] 的方法很好。开始用 c/c++ 思考

据我了解,正确的编程风格告诉我们,如果您想从另一个函数获取字符串(char[]),最好由调用者创建char*并将其与创建的字符串长度一起传递给字符串格式化函数。在我的例子中,字符串格式化函数是“getss”。voidgetss(char*ss,int&l){sprintf(ss,"aaaaaaaaaa%d",1);l=11;}int_tmain(intargc,_TCHAR*argv[]){char*f=newchar[1];intl=0;getss(f,l);cout>d;return0;}"getss"格式化字符串并将其返回给ss*。我认为getss不允许获得调用者创建的外部字符串

c++ - boost::optional<std::string> 和来自 char[] 的隐式构造函数

我已经习惯了通过让编译器找出所涉及的魔法来以下列方式初始化std::stringsstd::stringmy_string="hello";以下将不起作用,因为两种类型之间没有显式转换:boost::optionalmy_optional_string="hello";但这确实有效:boost::optionalmy_optional_string=std::string("hello");现在,难道没有办法菊花链隐式调用的单参数构造函数以允许第二种形式吗?我问的原因(虽然我不想用细节打扰你)是有一大堆类需要填充可选成员。必须显式输入所有内容似乎是一种负担(我不太担心自己,但我正在开发

c++ - 将 "unsigned char"传递给需要 char 或 const char* 的重载函数会导致歧义

我正在使用QByteArray来存储原始二进制数据。为了存储数据,我使用了QByteArray的附加函数。我喜欢使用无符号字符来表示字节,因为我认为255比-1更容易解释。但是,当我尝试将零值字节附加到QByteArray时,如下所示:command.append((unsignedchar)0x00));编译器提示重载append(unsignedchar)的调用不明确。据我了解,这是因为零可以解释为空指针,但是为什么编译器不将unsignedchar视为char,而不是想知道它是否是constchar*?当然,如果编译器在没有任何转换的情况下提示command.append(0),

c++ - C++ 容器内的 char* 作用域

具有以下内容:#includestd::setglobal=std::set();voidx(){constchar*c="a";constchar*d="b";global.insert(c);global.insert(d);}intmain(){x();for(std::set::const_iteratoriter=global.begin(),end=global.end();iter!=end;++iter){printf("%s\n",*iter);}return0;}最后,正如预期的那样,我收到打印的a和b。然而,是否有任何保证,例如,如果该集合是bozo对象的一部分,

c++ - 将 uint16_t 和 char* 与 QMetaObject::invokeMethod() 一起使用

我想使用QMetaObject::invokeMethod()从不同线程异步调用槽包含插槽的类声明为:classPaintable:publicQObject{Q_OBJECT[...]publicslots:voiddrawString(uint16_tx,uint16_ty,uint16_tsize,constchar*str,colorc);}调用invokeMethod的方法定义为:voiddrawStringAsynchronously(uint16_tx,uint16_ty,uint16_tsize,constchar*str,colorc){QMetaObject::in

c++ - 在 C++11 标准中哪里说 char* p = "abc";是病态的?

在C++11标准中哪里说char*p="abc";格式错误? 最佳答案 这在C++03中仍然有效(尽管已弃用),但在C++11中情况发生了变化。C++11标准的附件C提到(参见C1.1):Change:StringliteralsmadeconstThetypeofastringliteralischangedfrom“arrayofchar”to“arrayofconstchar.”Thetypeofachar16_tstringliteralischangedfrom“arrayofsome-integer-type”to“ar