C 如何将未签名的文件转换为uint64\t?

C 如何将未签名的文件转换为uint64\t?,c,c99,unsigned,C,C99,Unsigned,我有一个未签名的,我想把它转换成uint64\u t(如果可能的话返回) 我该怎么做?如果可能,我希望避免依赖未定义的行为 谢谢 既然你在C区,演员阵容将是你唯一的选择。干脆 uint64_t foo = (uint64_t)myVar; 或者反过来说 unsigned int bar = (unsigned int)foo; 您的编译器应该自动选择转换,尽管在uint64\u t->无符号int的情况下,您应该得到一个关于截断的警告。此外,如果您不是在64位环境中编译,那么在转换回时该值当

我有一个
未签名的
,我想把它转换成
uint64\u t
(如果可能的话返回)

我该怎么做?如果可能,我希望避免依赖未定义的行为


谢谢

既然你在C区,演员阵容将是你唯一的选择。干脆

uint64_t foo = (uint64_t)myVar;
或者反过来说

unsigned int bar = (unsigned int)foo;

您的编译器应该自动选择转换,尽管在
uint64\u t
->
无符号int
的情况下,您应该得到一个关于截断的警告。此外,如果您不是在64位环境中编译,那么在转换回时该值当然会被截断。

因为您是在C语言环境中,强制转换将是您唯一的方法。干脆

uint64_t foo = (uint64_t)myVar;
或者反过来说

unsigned int bar = (unsigned int)foo;
您的编译器应该自动选择转换,尽管在
uint64\u t
->
无符号int
的情况下,您应该得到一个关于截断的警告。此外,在转换回时,该值当然会被截断,除非您是在64位环境中编译的。

例如:

const uint64_t bigvalue = (uint64_t) 42u;
不确定演员阵容是否必要,因为这不会泄露信息。相反:

const unsigned int smallvalue = (unsigned int) bigvalue;
将需要强制转换,因为它(可能,假设
int
uint64\u t
)是一种更窄的类型

注:我指的是弱意义上的“需要”;由于转换为更窄的类型时有丢失信息的风险,编译器很可能会发出警告。演员阵容增加了一种“我知道我在做什么”的感觉,这就是此类警告通常被压制的方式。

例如:

const uint64_t bigvalue = (uint64_t) 42u;
不确定演员阵容是否必要,因为这不会泄露信息。相反:

const unsigned int smallvalue = (unsigned int) bigvalue;
将需要强制转换,因为它(可能,假设
int
uint64\u t
)是一种更窄的类型


注:我指的是弱意义上的“需要”;由于转换为更窄的类型时有丢失信息的风险,编译器很可能会发出警告。强制转换增加了一种“我知道我在做什么”的感觉,这就是此类警告通常被静音的方式。

从任何整数类型到无符号整数类型的转换完全由标准定义(第6.3.1.3节,第2段)。如果该值可以在目标类型中表示,则保留该值,否则该值将以模减少
2^WIDTH
,其中
WIDTH
是目标类型的宽度(值位数)。

从任何整数类型到无符号整数类型的转换完全由标准定义(第6.3.1.3节,第2段). 如果该值可以在目标类型中表示,则会保留该值,否则该值将以模减少
2^WIDTH
,其中
WIDTH
是目标类型的宽度(值位数)。

您可以通过类型转换来实现:

uint64_t new=(uint64_t)old


其中,
old
是您的未签名整数。

您可以使用类型转换:

uint64_t new=(uint64_t)old


其中,
old
是您的unsigned int。

不需要强制转换,从不,无符号类型之间的转换总是定义良好不需要强制转换,从不,无符号类型之间的转换总是定义良好这里不应该需要强制转换,通常在任何地方都要避免possible@JensGustedt-我以为警察已经试过了,因此建议演员阵容和我的最后一段。这是一个很好的观点,除非你真的,真的需要,否则你不应该施放。这里不应该需要施放,通常在任何地方都要避免possible@JensGustedt-我认为OP已经尝试过了,因此建议演员阵容和我的最后一段。这是一个很好的观点,除非你真的,真的需要,否则你不应该投。