Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C二进制文件中将int编码并组合为32位int_C_Uint32_Uint32 T - Fatal编程技术网

在C二进制文件中将int编码并组合为32位int

在C二进制文件中将int编码并组合为32位int,c,uint32,uint32-t,C,Uint32,Uint32 T,假设我有两个变量: int var1 = 1; //1 byte int var2 = 2; //1 byte 我想将它们结合起来,并编码为32位无符号整数(uint32_t)。通过组合它们,它将是2个字节。然后用2字节的0填充填充剩余的空间。这是为了写入文件,因此需要这种特定类型的编码 因此,通过组合上述示例变量,我需要的输出是: 1200 //4 bytes 无需采用迂回的方式将值“组合”到uint32\u t中。二进制文件是字节流,因此很可能写入单个字节: FILE * const o

假设我有两个变量:

int var1 = 1; //1 byte
int var2 = 2; //1 byte
我想将它们结合起来,并编码为32位无符号整数(uint32_t)。通过组合它们,它将是2个字节。然后用2字节的0填充填充剩余的空间。这是为了写入文件,因此需要这种特定类型的编码

因此,通过组合上述示例变量,我需要的输出是:

1200 //4 bytes

无需采用迂回的方式将值“组合”到
uint32\u t
中。二进制文件是字节流,因此很可能写入单个字节:

FILE * const out = fopen("myfile.bin", "wb");
const int val1 = 1;
const int val2 = 2;
if(out != NULL)
{
  fputc(val1, out);
  fputc(val2, out);
  // Pad the file to four bytes, as originally requested. Not needed, though.
  fputc(0, out);
  fputc(0, out);
  fclose(out);
}
这用于将单个字节写入文件。它使用整数参数来写入值,但在内部将其视为
无符号字符
,本质上是“一个字节”


读回同样简单,使用例如
fgetc()
读取这两个值,当然还要检查故障。您也应该检查这些写操作,因为错误处理,我省略了它。

您是说要将第一个值向上移动24位,将第二个值向上移动16位吗?即使这是您的要求,除非您显示十六进制值,否则显示的值也不会是1200…在大多数系统上,
int
不是1字节…换句话说,尝试实现您想要实现的目标。在这个过程中,你可以自己找到答案。大多数编程都是精确地指定要执行的操作,然后将其转换为代码。回答我:你认为数字12345(一万二千三百四十五)有5个字节吗?然后将它们写成字节。或者,您可以通过将第一个值左移24,将第二个值左移16来“组合”它们,然后或将结果转换为整数,然后写入完整的整数。应该有两个fputc(0,out);fclose(out)前;要完全回答这个问题(“然后用2个字节的0填充填充剩余空间。”),请注意
int
可以大于255,如果
fputc(256)
它将写入
0
@Alex-如果你的变量是用来保存字节的,那么把它们声明为
byte
@Neil True,这是毫无意义的,但是OP想要的。我加了,谢谢。