1

我必须从标准输入中准确读取 4 个字节,然后将其视为小端并在标准输出上显示,但我不知道我读取的内容是否正好是 4 个字节。我试过这个:

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
#include <byteswap.h>

int main() {
   uint32_t f;

   printf("Enter a value :");
   scanf ("%" SCNu32, &f);
   printf("Value of integer:%d", f);
   //printf("Value of integer:%d", __bswap_32(f));

   return 0;
}

我不确定这是否准确读取 4 个字节。我尝试使用以下整数:

input->output
123->123
12345678->12345678
123456789->123456789
4294967295->-1
4294967294->-2
4294967296->-1
1->1

我认为通过打印f它会像这样:(1234000f=1234)或12345678(值f=123456789)。

4

1 回答 1

1

要从 中准确读取 4 个字节,stdin您可以使用或:fread()getc()scanf()

  • fread(&f, sizeof f, 1, stdin);
  • char *p = (char *)&f; for (size_t i = 0; i < sizeof(f); i++) p[i] = getchar();
  • char *p = (char *)&f; for (size_t i = 0; i < sizeof(f); i++) p[i] = getc(stdin);
  • char *p = (char *)&f; scanf("%c%c%c%c", p, p+1, p+2, p+3);

但是请注意,stdin在执行行尾转换的旧系统上,默认情况下以文本模式打开,并且没有可移植的方法来在打开的流上更改此模式。

于 2021-01-02T19:13:20.100 回答