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已经尝试过了,因此建议演员阵容和我的最后一段。这是一个很好的观点,除非你真的,真的需要,否则你不应该投。