首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有大整数的结构初始化

具有大整数的结构初始化
EN

Stack Overflow用户
提问于 2022-05-23 17:09:15
回答 2查看 66关注 0票数 4

因此,我有以下结构:

代码语言:javascript
运行
复制
typedef struct int64 {
    unsigned char value[8];
} int64;

它用于表示64位整数(我知道stdint.h中存在这种情况,但我认为自己编写它可能是一个很好的练习,我计划对大得多的整数使用这种格式)。我的问题是,是否可以使用二进制字符串或超大型整数初始化此结构,例如:

代码语言:javascript
运行
复制
int64 number = 0b1000000000000000000000000000000000000000000000000000000000011001

// Or

int64 number = 1231823812738123878;  // Or something larger than 2^32

谢谢你对我的帮助:)

EN

回答 2

Stack Overflow用户

发布于 2022-05-23 17:18:45

您必须逐字节拆分它,因为结构包含一个字节数组:

代码语言:javascript
运行
复制
int64 number = { { 0b10000000, 0b00000000, 0b00000000, 0b00000000, 
                   0b00000000, 0b00000000, 0b00000000, 0b00011001 } };

您可以使用十六进制常量而不是二进制常量压缩它:

代码语言:javascript
运行
复制
int64 number = { { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19 } };
票数 1
EN

Stack Overflow用户

发布于 2022-05-23 20:04:18

对于64位数字,您可以使用宏:

代码语言:javascript
运行
复制
#if USE_BIG_ENDIAN
#define INIT64(x) { (((x)|0ULL)>>56)&255, (((x)|0ULL)>>48)&255, \
                    (((x)|0ULL)>>40)&255, (((x)|0ULL)>>32)&255, \
                    (((x)|0ULL)>>24)&255, (((x)|0ULL)>>16)&255, \
                    (((x)|0ULL)>> 8)&255, (((x)|0ULL)>> 0)&255 }
#else
#define INIT64(x) { (((x)|0ULL)>> 0)&255, (((x)|0ULL)>> 8)&255, \
                    (((x)|0ULL)>>16)&255, (((x)|0ULL)>>24)&255, \
                    (((x)|0ULL)>>32)&255, (((x)|0ULL)>>40)&255, \
                    (((x)|0ULL)>>48)&255, (((x)|0ULL)>>56)&255 }
#endif

int64 number0 = INIT64(0);
int64 number1 = INIT64(0b1000000000000000000000000000000000000000000000000000000000011001);
int64 number2 = INIT64(1231823812738123878);

唉,这种方法不会适用于更大的类型。在运行时从字符串表示形式进行转换是一个典型的解决方案。您还可以使用替代适当语法的实用程序(如使用等效初始化器的BIGNUM(x) )对源代码进行预处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72352367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档