jjzjj

c++ - 将结构转换为 uint8_t 的 constexpr 数组

我需要从constexpr结构中创建字节的constexpr数组。#includetemplateconstexprstd::arrayo2ba(constTo){return{};}structA{inta;};intmain(){constexprAx{1};constexprautoy=o2ba(x);//y=={0x01,0x00,0x00,0x00}forlittleendianreturn0;}我试图从union中提取它:templateunionU{To;std::arrayd;};templateconstexprstd::arrayo2ba(constTo){retu

c++ - C/C++ : how to separate addressing mode code from actual instruction code 中的 6502 仿真器

在业余时间,我开始为6502CPU编写一个非常简单的C++仿真器。我过去常常为这个CPU写下很多汇编代码,所以所有的操作码、寻址模式和其他东西都不是什么大问题。6502有56条不同的指令加上13种寻址模式,总共提供151种不同的操作码。对我来说,速度不是问题,所以我不想写一个巨大的switch-case语句并一次又一次地重复相同的代码(不同的操作码可以使用不同的寻址模式引用相同的指令)我想将实际的指令代码与寻址模式代码:我发现这个解决方案非常简洁,因为它只需要编写13个寻址模式函数和56个指令函数,无需重复。这里寻址模式的作用是://Addressingmodesuint16_tAdd

c++ - xorshift128+ 算法的真正定义是什么?

我需要一个好的伪随机数生成器(PRNG),目前最先进的似乎是xorshift128+算法。不幸的是,我发现了2个不同的版本。维基百科上的那个:Xorshift显示为:uint64_ts[2];uint64_txorshift128plus(void){uint64_tx=s[0];uint64_tconsty=s[1];s[0]=y;x^=x>17)^(y>>26);//b,creturns[1]+y;}这看起来很简单。更重要的是,编辑日志似乎显示该代码片段是由名为“Vigna”的用户添加的,该用户可能是“SebastianoVigna”,他是关于xorshift128+的论文的作者:

c++ - clang 的 uint24_t 是如何工作的?我可以在 clang/LLVM 之外使用它吗?

作为GCC用户,我刚刚注意到clang支持uint24_t类型(它在他们的stdint.h中)。这是如何运作的?我的意思是,它是纯粹在内部支持,作为一种语言扩展,还是像C++类那样实现,具有超过3个字节或16位值和另一个8位值的抽象?并且-怎么可能通过GCC来“猛拉”这样的实现并自己使用它?注意:我希望在现代C++中有一个类似uint24_t的类(或更一般的uint_t);我的替代方案是自己动手。你可以s/uint/int/g;如果你喜欢这个问题。 最佳答案 这不是可移植的或标准的。它仅适用于AVR(具有24位地址)和GCChasi

C++ 任意宽度容器

我有一个很大的查找表,目前每个条目需要12位。是否有一个标准类可以为我提供一个内存高效的容器来存储奇数大小的数据?我的表中有大约10亿个项目,所以我更关心内存效率而不是速度。我需要能够获取底层数据并将其读/写到文件中。 最佳答案 这个怎么样:#includetypedefunsignedcharbyte;typedefunsignedshortword;typedefunsignedintuint;typedefunsignedlonglongintqword;enum{bits_per_cell=12,cellmask=(1>4)

c++ - 除法不跨越字节

我正在尝试对由2个uint64_t组成的uint128_t进行除法。奇怪的是,该函数适用于uint64_t,仅设置了较低的值且较高的值=0。我不明白为什么。下面是除法和位移的代码classuint128_t{private:uint64_tUPPER,LOWER;public://lotsofstuffuint128_toperator=128)out=uint128_t(0,0);elseif((128>shift)&&(shift>=64))out=uint128_t(LOWER>(64-shift)),LOWER=rhs){//copyofdenomiator=copyd//te

c++ - OpenCV - 如何从 uint8_t 指针创建 Mat

我有以下C++代码:voidfoo(constuint8_t*data,intheight,intwidth){//needtocreateacv::Matfrom*data,whichisapointertograyscaleimagedata//doesn'tworkcorrectly(compiles,butarrayaccessonthematleadstoasegmentationfault)autoimg=cv::Mat(height,width,CV_8UC1,&data);//howcanIfixthelineabovetocreateapropercv::Mat?}/

c++ - 编译器如何确定位域结构的大小?

例如:structa{uint32_tforeColor_:32;uint32_tbackColor_:32;uint16_tlfHeight_:16;uint16_tflags_:4;boollfBold_:1;boollfItalic_:1;boollfUnderLine_:1;boollfDashLine_:1;boollfStrike_:1;boollfSubscript_:1;boollfSuperscript_:1;};是16个字节但是structa{uint32_tforeColor_:32;uint32_tbackColor_:32;uint16_tlfHeight_:

c++ - 如何将数字数据读取为 uint8_t

这个问题在这里已经有了答案:istringstreamdecimalintegerinputto8-bittype(5个答案)关闭8年前。我在istream中有一些人类可读的数字数据。取值范围为0-255,我想将它们存储在uint8_t中。不幸的是,如果我尝试类似的东西uint8_ta,b;stringstreamdata("12467");data>>a>>b;然后我以a=='1'和b=='2'结束。我知道这在很多情况下都是理想的行为,但我想以a==124和b==67结束。我目前的解决方法是将数据流式传输到int中,然后将它们复制到uint8_t中。uint8_ta,b;inta_,

c++ - 为什么在一个类中使用 uint64_t 需要比 2 个 uint32_t 更多的内存?以及如何防止这种情况?

我做了下面的代码作为例子。#includestructclass1{uint8_ta;uint8_tb;uint16_tc;uint32_td;uint32_te;uint32_tf;uint32_tg;};structclass2{uint8_ta;uint8_tb;uint16_tc;uint32_td;uint32_te;uint64_tf;};intmain(){std::cout打印202484因此很容易看出一个uint64_t与两个uint32_t一样大,为什么类2会有4个额外字节,如果它们除了用两个uint32_t替换一个uint64_t之外是相同的。