c - 从 C 中的标准输入中准确读取 N 个字节
问题描述
我必须从标准输入中准确读取 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
它会像这样:(1234000
值f=1234
)或12345678
(值f=123456789
)。
解决方案
要从 中准确读取 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
在执行行尾转换的旧系统上,默认情况下以文本模式打开,并且没有可移植的方法来在打开的流上更改此模式。
推荐阅读
- javascript - 如何填充可能无限量的迭代 JSON 文件中的对象的下拉列表?
- haskell - 最外层评估策略如何评估函数的部分应用和柯里化函数的应用
- ios - 如何在 iOS 13 中获取状态栏高度?
- sql - 如何使用 Postgres SQL 将行转换为列?
- xamarin - iOS 项目中不播放视频
- java - 如何使用JAVA一次更新mongo db的单个文档中的多个字段(数组字段和普通字段)?
- python - 无法从多线程 for 循环中退出
- php - Composer 无法下载 Google Text-To-Speech 库
- graphql - 如何对 Hasura 中的 ARRAY 字段类型运行 GraphQL 过滤器查询?
- ssl - 带有 SSL 证书的 NGINX 反向代理仅在 Firefox 中给出 SEC_ERROR_UNKNOWN_ISSUER 错误