C 如何从硬编码的literal初始化_exet()?

C 如何从硬编码的literal初始化_exet()?,c,rust,clang,extint,C,Rust,Clang,Extint,我使用的rust项目依赖于0.2.2。我需要将一个H160与一个文本进行比较(模式确切知道my_var==0xDAC17F958D2EE523A2206206994597497C13D831EC7) 在内部,H160类型只是一个指向一个普通整数的指针,该整数的编码类似于\u exet()。由于我已经需要将值传递给C模块,我正在考虑从那里进行比较 问题是,clang中的整数被读取为64位整数,因此 const _ExtInt(160) my_const=0xdac17f958d2ee523a220

我使用的rust项目依赖于0.2.2。我需要将一个H160与一个文本进行比较(模式确切知道my_var==0xDAC17F958D2EE523A2206206994597497C13D831EC7)

在内部,
H160
类型只是一个指向一个普通整数的指针,该整数的编码类似于
\u exet()
。由于我已经需要将值传递给C模块,我正在考虑从那里进行比较

问题是,clang中的整数被读取为64位整数,因此

const _ExtInt(160) my_const=0xdac17f958d2ee523a2206206994597c13d831ec7;

:1:28:错误:整数文本太大,无法在任何整数类型中表示

那么如何在big-endian中分配
my_const

从较小的值构造它并移位

const _ExtInt(160) my_const = 
    (unsigned _ExtInt(160))0xdac17f95ull << 128 |
    (unsigned _ExtInt(160))0x8d2ee523a2206206ull << 64 |
    (unsigned _ExtInt(160))0x994597c13d831ec7ull << 0;
const已灭绝(160)my_const=

(unsigned_exet(160))0xdac17f95ull它是您自己的类型还是某个库中的类型?请提供一个最小的可重复的示例。@PitaJ您的意思是
\u demit()
?这是一个由clang支持的非标准本机类型。您的链接表明,
\u demit
未实现文字(在“未来扩展”下的最后两段)。@NateEldredge但6个月后,它是clang版本12的一部分。
但6个月后,它是clang版本12的一部分
您对此有任何参考吗?如果是的话,你为什么不使用它呢?当机器在小端时,如何使用大端?(这是我从大端甸的锈菌H160开始的情况)我想象
\u灭绝(160)
将永远是本地端甸。如果您想确保数据是big-endian,只需传递一个字节数组即可。
当机器处于little-endian时,如何使用big-endian?
我不明白。值的C表示总是在左边的MSB,与endianess无关。若您想要切换值的特定字节,这将导致特定字节存储在特定体系结构的特定位置,那个么这只是一个映射和一个数学运算。C非常适合做数学运算,它是
&
运算符。@KamilCuk将与之进行比较的已灭绝的作为字节数组从网络接收。x86是小端数。因此,需要按照网络字节顺序将常量分配给
my_const
。@PitaJ我应该如何将字节数组传递给它?
const _ExtInt(160) my_const = 
    (unsigned _ExtInt(160))0xdac17f95ull << 128 |
    (unsigned _ExtInt(160))0x8d2ee523a2206206ull << 64 |
    (unsigned _ExtInt(160))0x994597c13d831ec7ull << 0;