草庐IT

c++ - 以合理的编译时间静态初始化巨大的 uint8_t 数组

我想静态初始化巨大(兆字节)的uint8_t数组。一开始我试过这个:constexpruint8_tarr[HUGE_SIZE]={0,255,...};不幸的是,上面的编译时间很长(没有优化-大约30秒,优化-超过一小时)。我发现如果我们使用c风格的字符串初始化,编译时间可以减少到可以忽略不计(在优化关闭和打开的情况下):constexpruint8_tarr[HUGE_SIZE+1]="\x00\xFF\x...";这是C++中的好方法吗?我是否应该使用一些字符串文字来使上述赋值两边的类型相等? 最佳答案 如果数组真的很大,可以

c++ - 将 uint64_t 截断为 uint8_t[i] 时是否应该使用位掩码?

如果我有一个大的int,比如一个uint64_t和一个uint8_t数组,例如:uint64_tlarge=12345678901234567890;uint8_tsmall[5];并且我想将uint64_t的8个最低有效位复制到uint8_t数组的一个元素中,是否可以安全地使用:small[3]=large;或者我应该使用位掩码:small[3]=large&255;即是否存在大int的其余部分可能以某种方式溢出到数组的其他元素中的情况? 最佳答案 它肯定不会导致数据被错误处理。但是,某些编译器可能会生成警告消息。有两种选择可以避

c++ - 如何将 std::hex 用于我的自定义 uint128 类型?

重载(或实际是什么)std::hex的正确语法是什么,以便它的功能可以扩展到非标准整数?我写了这个版本的uint128_t 最佳答案 std::hex只是一个在流上设置一些格式化标志的操纵器。您可以使用ios_base::flags()获取它们并在您的operator如果您想要的设置比提供的更多,ios_base::xalloc、ios_base::iword、ios_base::pword为您的操纵器和插入器提供扩展路径。 关于c++-如何将std::hex用于我的自定义uint128

c++ - MinGW 中的 uint24_t 和 uint48_t

我在GCC和MinGW中寻找uint24_t和uint48_t类型。我知道两者都不是标准化的,但我在网上看到了对它们的引用,我想弄清楚:我需要为他们添加什么header。它们是跨平台的(至少在Windows、Linux和MacOSX上),还是仅针对特定目标。他们的名字是什么。uint24_t,__uint24,__uint24_t? 最佳答案 标准uintXX_t类型在stdint.h(C、C++98)或cstdint(C++11)中提供。在8位数据,24位地址的AVR架构上,GCC提供了内置的24位整数,但不可移植。参见http:

c++ - 为什么读取 uint8_t 为十六进制不能按预期工作?

考虑这样的代码:#include#includeintmain(){std::stringstreamss;ss>std::hex>>byte;std::cout为什么这个输出a而不是a0即使a0适合uint8_t作为十六进制? 最佳答案 因为uint8_t也是(可能)unsignedchar,为此specialrulesexist当您从C++流执行格式化提取时。不幸的是thisisjustanalias,notadistincttype.基本上它会跳过“词汇转换为数字”步骤,因为它认为您想要提取一个字符。字符'a'。我认为您需要读

c++ - 错误 [Pe513] : a value of type "void *" cannot be assigned to an entity of type "uint8_t *"

我正在尝试将C项目转换为C++。在C项目中,我在编译成C++时遇到了这个错误:Error[Pe513]:avalueoftype"void*"cannotbeassignedtoanentityoftype"uint8_t*"下面的代码给出了这个错误:#defineRAM32Boundary0x20007D00uint8_t*pNextRam;pNextRam=(void*)RAM32Boundary;//loadupthebaseram谁能解释一下这是在C中做什么以及如何将其转换为C++? 最佳答案 C允许与void*之间的隐式转

c++ - 如何输入 int64_t/uint64_t 常量?

我想做的是定义一个等于2^30的常量(我可能会将其更改为2^34之类的东西,所以我更愿意为它设置一个大于32位的空间)。为什么以下最小(?)示例无法编译?#include//test.cpp:4:33:error:expectedprimary-expressionbeforenumericconstant//test.cpp:4:33:error:expected')'beforenumericconstantconstuint64_ttest=(uint64_t1) 最佳答案 您可以使用宏:UINT64_C为了定义64位无符号整

c++ - std::uint8_t 的底层类型

问题:是否有任何c++工具链,其中std::uint8_t存在,但不是unsignedchar(或char,如果它是无符号的)?编辑:相反:在符合标准的实现中这样的事情甚至可能吗?背景/动机:我问的主要是因为我想知道std::uint8_t*是否可以移植地用于访问单个字节(就像unsignedchar*一样)。是的,我知道std::byte,但这与此处无关。我主要对x86、arm和mips的工具链感兴趣,但出于好奇,我也想听听其他示例。 最佳答案 char不是无符号整数类型,即使它实际上是无符号的。由于uint8_t必须是无符号整数

c++ - 使用 typedef'd uint 会导致错误,而 "unsigned int"不会...?

出于某种原因,当我在我的程序中将变量定义为“uint”而不是“unsignedint”时,它会出错。这看起来很奇怪,因为uint被定义为:typedefunsignedintuint;...所以我认为我可以互换使用这两者。更确切地说,我将返回“unsignedint”的函数的结果分配给一个uint变量,然后在vector调整大小调用中使用该uint...此时出错。即,我的代码看起来像这样:unsignedintgetUInt(){return3;}intmain(void){vector>vectVect(100000);for(uinti=0;i&myVect=vectVect[i]

c++ - uint32_t 值对的交换哈希函数

我需要一个快速、简单的哈希函数来为一对uint32_t创建一个唯一标识符值-所以(2,7)的散列值相同和(7,2).有什么想法吗? 最佳答案 为了回答我自己的问题,解决方案是:uint64_thash(uint32_tx,uint32_ty){constuint64_ta=static_cast(x);constuint64_tb=static_cast(y);if(x可以改进到无分支版本uint64_thash(uint32_tx,uint32_ty){constuint64_ta=static_cast(x);constuint