gpt4 book ai didi

c - scanf characters into an int 没有转换

转载 作者:太空宇宙 更新时间:2023-11-04 02:47:13 25 4
gpt4 key购买 nike

如何使用 scanf 扫描整数个字符并将它们简单地填充到一个 unsigned int 中而不进行转换?

举个例子,我有以下输入字符(为了可见性,我把它们放在十六进制中):

5A 5F 03 00 FF FF 3D 2A

我想要前 4 个(因为 4 个字符适合 int)。在基数 10(十进制)中,这等于 221018(大端)。伟大的!这就是我想要的。这似乎按预期工作:

scanf("%s", &my_integer);

它似乎以某种方式获得了正确的字节顺序,将第一个字符放在 int 的 LSB 中(为什么?)。正如您所期望的那样,这会产生编译器警告,因为指针必须指向字符数组 (man 3 scanf)。

另一种不使用 scanf() 的方法:

for (int i = 0; i < 4; i++)
{
my_integer |= (getchar() << i * 8);
}

请注意,我不打算在这里做任何转换,我只是想使用指针类型来指定要读取多少个字符。如果 &my_integer 是 long 也是如此,我会读取并存储八个字符。

真的很简单。

看来我使用 scanf 的想法不正确,必须有更好的方法。你会怎么做?

注意我知道类型大小取决于架构。

最佳答案

所以你想从 stdin 读取 4 个字节,并按原样使用它们作为 32 位大端值的表示:

int my_integer;

if (fread (&my_integer, sizeof my_integer, 1, stdin) != 1) {
/* Some problem... */
}

关于c - scanf characters into an int 没有转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26037398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com