jjzjj

c++ - 将 const uint * 的值复制到 C++ 中的另一个变量

我想我有一个普遍的问题。我目前正在学习C++和SDL2.0。SDL提供了一个函数,该函数返回一个指向包含所有键状态的constuint*的指针。这些是我想使用的变量:constUint8*oldKeyState;constUint8*currentKeyState;在构建我的input.cpp时:currentKeyState=SDL_GetKeyboardState(&this->length);oldKeyState=currentKeyState;在我使用的Update()方法中:oldKeyState=currentKeyState;currentKeyState=SDL_Ge

c++ - 将 16 位立体声转换为 16 位单声道

我正在尝试将16位立体声从WAVE文件转换为16位单声道,但我遇到了一些困难。我尝试将8位立体声转换为单声道,效果很好。这是一段代码:if(bitsPerSample==8){dataSize/=2;openALFormat=AL_FORMAT_MONO8;for(SizeTypei=0;i((static_cast(pData[i*2])+static_cast(pData[i*2+1]))/2);}但是,现在我正尝试对16位音频做几乎相同的事情,但我就是无法让它工作。我只能听到某种奇怪的声音。我尝试将“monoSample”设置为“left”(Uint16monoSample=le

c++ - 为什么 uint8_t + uint8_t 会产生一个 int?

这个问题在这里已经有了答案:Additionoftwocharsproducesint(3个答案)关闭3年前。我注意到,对于8位变量的简单操作,变量在操作完成之前转换为32位int,然后再转换回8位变量。例如,这个C++程序:#include#includeintmain(void){uint8_ta=1;uint8_tb=2;std::cout产生以下输出:sizeof(a)=1sizeof(b)=1sizeof(a+b)=4所以我们可以理解发生的事情是:uint8_tc=(uint8_t)((int)(a)+(int)(b));显然,它似乎在this中所说的C规范中。论坛。此外,在

c++ - 防止不同数据类型的重复代码 (uint16_t/uint32_t)

我正在寻找使用函数的可能性,我将指针传递给uint16_t或uint32_t值。目前我使用的是两个重载函数std::vectorcalcMap(uint16_t*map)std::vectorcalcMap(uint32_t*map)由于它们返回浮点值,因此对于16位和32位值的计算是相同的。唯一的区别是通过指向的数组所需的数据类型。我不想两次拥有函数的全部内容,是否有可能使其与类型无关? 最佳答案 主要是为了完整性:以防您不想公开函数的实现,并且出于任何原因不想转发到私有(private)模板。有一个经常被忽视的显式模板实例化声明

c++ - 使用类型转换将 C 库包装在 C++ 类中

我正在慢慢学习成为一名更好的C++程序员,目前我正在讨论为C库实现包装器的最佳方法。该库是一种压缩文件格式的包装器,可以存储各种类型的标签(char*、char、double、float、int32_t)。类型存储为uint8_t*并且有许多辅助方法可以将这些标签转换为正确的类型。例如:chartag2char(constuint8_t*v);char*tag2string(constuint8_t*v);uint32_ttag2int(constuint8_t*v);等等。我在模板方面没有太多经验,但是否值得以类似于boostprogramoptions的方式将这些方法包装在模板函数

c++ - C++ 中的虚拟(平面)文件系统

本质上,我需要实现一个程序来充当用户空间文件系统,它实现非常简单的操作,例如查看磁盘上的内容、将文件复制到本地文件系统或从本地文件系统复制文件到我的文件系统(包含在一个名为“disk01”的文件并从我的文件系统中删除文件。我基本上是在寻找一个跳板或一些关于我可以从哪里开始的提示,因为我不确定如何创建我自己的“磁盘”并将其他文件放入其中,这是一项家庭作业。只是一个正在寻找方向的C++学生。编辑:我知道这个概念已经在多个不同的地方使用,例如“VFS”或虚拟文件系统,有点像zip文件(您只能通过可以处理zip文件的程序查看内容)。我基本上是在尝试编写自己的程序,类似于zip或winrar或其

c++ - 可以在 g++ 4.7+ 中重新启用 `uint` 类型吗?

我有大量代码正试图从g++版本4.2.2转换为4.7.2。在4.2.2及之前的版本中,uint似乎被定义为unsignedint。我知道这不是标准的C++东西,真正的人写ISO标准C++,但我想知道是否有标志或某种方式让g++在不修改所有源文件的情况下接受uint.我可以更改CPPFLAGS或向g++运行线添加一个开关吗?我的谷歌一无所获。我有一些来自不同工作组的源文件,我想接​​受他们的uint违规行为。例如#include#include#includeusingnamespacestd;intmain(void){uintfoo=0xdeadbeef;cout产量:/tmp/rb

c++ - std::cout 将 uint8_t 作为字符处理

如果我运行这段代码:std::cout(65);它会输出:A这是数字65的ASCII等价物。这是因为uint8_t被简单地定义为:typedefunsignedcharuint8_t;这种行为是标准的吗?定义uint8_t保证作为数字而不是字符来处理不是更好的方法吗?我无法理解如果我想打印uint8_t变量的值,它将被打印为一个字符的逻辑。附言我正在使用MSVS2013。 最佳答案 Isthisbehaviorastandard行为是标准的,因为如果uint8_t是unsignedchar的typedef,那么它将始终打印一个字符为

c++ - 在 C++ 中更有效地分配 struct 的内存

我正在尝试用C++构造一个结构,如下所示:structkmer_value{uint32_tcount:32;uint32_tpath_length:32;uint8_tacgt_prev:4;uint8_tacgt_next:4;}该结构目前占用12个字节的内存,但我想将大小减小到9个字节。有什么办法可以实现吗?谢谢。 最佳答案 没有可移植的解决方案。对于GCC,这将是struct__attribute__((packed))kmer_value{uint32_tcount:32;uint32_tpath_length:32;ui

c++ - 为什么编译器不断警告我从 `int` 缩小到 `uint8`?

我检查了一遍又一遍,我确定我没有将uint8转换为int隐含在我的代码中,既不向前也不向后。//main.cpp#includeusingstd::cout,std::endl;usinguint8=unsignedchar;structVector{uint8x,y,z;Vectoroperator+(constVector&v)const{returnVector{this->x+v.x,this->y+v.y,this->z+v.z};};voidoperator+=(constVector&);voidoperator-(constVector&)const;Vectorope