xwg*_*gou 4 c casting binary-data
我有一个二进制值存储在 C 中的 char 中,我想将这个字节转换为 C 中的有符号 int 。目前我有这样的东西:
char a = 0xff;
int b = a;
printf("value of b: %d\n", b);
Run Code Online (Sandbox Code Playgroud)
标准输出的结果将为“255”,所需的输出为“-1”。
根据C99标准,
\n\n\n\n\n6.3.1.3 有符号和无符号整数
\n\n当一个整数类型的值转换为_Bool以外的其他整数类型时,如果该值可以用新类型表示,则该值不变。
\n\n否则,如果新类型是无符号的,则通过重复加或减新类型可以表示的最大值 1 来转换该值,直到该值在新类型的范围内。
\n\n否则,新类型是有符号的,并且该值无法在其中表示;结果要么是实现定义的,要么引发实现定义的信号。
\n
您需要在分配给 之前将您转换char为 a ,因为任何值都可以直接表示为。signed charintcharint
#include <stdio.h>\n\nint main(void) {\n char a = 0xff;\n int b = (signed char) a;\n printf("value of b: %d\\n", b);\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n快速测试表明它在这里有效:
\n\nC:\\dev\\scrap>gcc -std=c99 -oprint-b print-b.c\n\nC:\\dev\\scrap>print-b\nvalue of b: -1\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,charC99 标准未定义是否将其视为有符号或无符号。
\n\n6.2.5 类型
\n\n声明为char类型的对象足够大,可以存储基本\n 执行字符集的任何成员。如果基本执行字符集的成员存储在 char 对象中,则其值保证为正数。如果任何其他字符存储在char对象中,则结果值由实现定义,但应在该类型可以表示的值范围内。
\n\n...
\n\nchar、signed char和unsigned char三种类型统称为字符类型。实现应将 char 定义为与有符号 char或无符号 char具有相同的范围、表示形式和行为。
\n