草庐IT

c++ - (uint64_t)-1 是否保证产生 0xffffffffffffffff?

我知道,C标准很好地定义了(unsigned)-1必须产生2^n-1,即。e.一个无符号整数,其所有位都已设置。(uint64_t)-1ll也是如此。但是,我在C11标准中找不到指定如何解释(uint64_t)-1的内容。那么,问题是:C标准中是否有任何保证,以下哪项成立?(uint64_t)-1==(uint64_t)(unsigned)-1//0x00000000ffffffff(uint64_t)-1==(uint64_t)(int64_t)-1//0xffffffffffffffff 最佳答案 是的。请参阅C116.3.1.

c++ - unsigned long 和 UINT64 的区别

unsignedlong和UINT64有什么区别?我认为它们是相同的,但我不确定。UINT64的定义是:typedefunsigned__int64UINT64(通过使用StdAfx.h) 最佳答案 UINT64是特定的并声明了您的意图。您需要一个正好是64位宽的无符号整数类型。在某些平台上这可能等于unsignedlong是巧合。 关于c++-unsignedlong和UINT64的区别,我们在StackOverflow上找到一个类似的问题: https:/

c++ - 我应该如何在 API 中替换 vector<uint8_t>::const_iterator?

我的任务是完善编解码器库的界面。我们使用的是C++17,我只能使用标准库(即没有Boost)。目前,有一个Decoder大致如下所示的类:classDecoder:publicCodec{public:structResult{vector::const_iteratornew_buffer_begin;optionalmetadata;optionalpacket;};Resultdecode(vector::const_iteratorbuffer_begin,vector::const_iteratorbuffer_end);private://irrelevantdetails

c++ - uint8、uint16等的使用

目前我正在使用针对32位MIPS平台的代码库(C、C++混合)。该处理器是一个相当现代的处理器[只是提到我们拥有大量的处理能力和内存]。代码库使用uint8[1字节宽无符号整数]、uint16[2字节宽无符号整数]、uint32[4字节宽无符号整数]等数据类型。我知道在将代码移植到不同平台时如何使用这些结构。我的问题是:在uint32也足够的情况下使用uint16有什么用途/好处(如果有的话)?使用较短的数据类型(考虑数据对齐)会节省内存吗?如果是为了节省几个字节的内存,在现代硬件中这样做是否明智? 最佳答案 Whatistheus

python - 如何将图像从 np.uint16 转换为 np.uint8?

我正在创建一个图像:image=np.empty(shape=(height,width,1),dtype=np.uint16)之后我将图像转换为BGR模型:image=cv2.cvtColor(image,cv2.COLOR_GRAY2BGR)我现在想将图像转换为dtype=np.uint8以便将该图像与cv2.threshold()函数一起使用。我的意思是,我想将图像转换为CV_8UC1。 最佳答案 您可以使用cv2.convertScaleAbs来解决这个问题。见Documentation.查看下面的命令终端演示:>>>img

c++ - 如何在 MongoDB 文档中存储 unsigned long long (uint64_t) 值?

我想在MongoDB文档中存储unsignedlonglong(uint64_t)类型的数字,我该怎么做?我需要使用unsignedlonglong,因为我正在使用TwitterAPI,它使用无符号64位整数https://dev.twitter.com/docs/twitter-ids-json-and-snowflake无符号64位整数类型的范围需要用8个字节表示,数据范围为0到18,446,744,073,709,551,615。我正在使用C++MongoDBdriver和BSONArrayBuilder的append成员函数类没有unsignedlonglong的重载,只有lo

c++ - uint8_t、uint16_t、...的格式说明符?

如果我有一个整数变量,我可以通过使用格式说明符%d来使用sscanf,如下所示。sscanf(line,"Valueofinteger:%d\n",&my_integer);在哪里可以找到uint8_t、uint16_t、uint32_t和uint64_t的格式说明符?uint64_t可能有%lu。 最佳答案 它们在中声明作为宏:SCNd8、SCNd16、SCNd32和SCNd64。示例(对于int32_t):sscanf(line,"Valueofinteger:%"SCNd32"\n",&my_integer);它们的格式是PR

c++ - char* 和 std::uint8_t* 之间的 reinterpret_cast - 安全吗?

现在我们有时都必须使用二进制数据。在C++中,我们使用字节序列,并且从一开始char是我们的基石。定义为sizeof1,它是字节。并且所有库I/O函数都使用char默认。一切都很好,但总有一点问题,一些奇怪的问题困扰了一些人-一个字节中的位数是实现定义的。所以在C99中,决定引入几个typedef来让开发人员轻松表达自己,固定宽度的整数类型。当然是可选的,因为我们不想损害可移植性。其中,uint8_t,作为std::uint8_t迁移到C++11,一个固定宽度的8位无符号整数类型,对于真正想要使用8位字节的人来说是完美的选择。因此,开发人员接受了新工具并开始构建明确声明他们接受8位字节

c++ - int8_t 和 uint8_t 是 char 类型吗?

给定这个C++11程序,我应该期望看到一个数字还是一个字母?还是不抱期望?#include#includeintmain(){int8_ti=65;std::cout标准是否指定此类型是否可以或将是字符类型? 最佳答案 来自C++0xFDIS(N3290)的§18.4.1[cstdint.syn],int8_t是一个可选的typedef,指定如下:namespacestd{typedefsignedintegertypeint8_t;//optional//...}//namespacestd§3.9.1[basic.fundame

c++ - 什么时候 uint8_t ≠ unsigned char?

根据C和C++,CHAR_BIT>=8。但是每当CHAR_BIT>8时,uint8_t甚至都不能表示为8位。它必须更大,因为CHAR_BIT是系统上任何数据类型的最小位数。在什么样的系统上,uint8_t可以合法地定义为unsignedchar以外的类型?(如果C和C++的答案不同,那么我想两者都知道。) 最佳答案 如果存在,uint8_t必须始终与unsignedchar具有相同的宽度。但是,它不必是同一类型;它可能是一个不同的扩展整数类型。它也不需要与unsignedchar具有相同的表示;例如,可以以相反的顺序解释这些位。这是