gpt4 book ai didi

c - 在没有隐式/显式转换的情况下在 C 中查找字节顺序

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

我期待着找到一种无需隐式/显式转换、循环、切换、内置函数、宏 的字节序。我试过一段代码,但它使用显式转换。

int is_little_endian(){
int temp = 1;
return *(char *) temp;//Returns 1 if it's a little endian machine.
}

[编辑]

它必须在不使用任何转换的情况下完成。我找不到一个问题,我们可以在不强制转换和使用宏的情况下做到这一点。 Implicit Casting 这里指的是编译器的自动转换。说从 char 到 int。

最佳答案

没有“隐式转换”这样的东西——转换是一个显式运算符。但是,如果您正在寻找一种无需检查对象的表示 即可观察字节顺序的方法,那么没有办法。 Endianness 纯粹是表示的属性,而不是值的属性,因此如果您限制自己访问表示,它就不存在。这就是为什么大多数好的代码不应该关心字节顺序的原因。

如果您确实想作弊并访问表示,但又不想让它看起来像 Actor ,这里有一些想法:

int i = 1;
char c;
memcpy(&c, &i, 1);
c;

或:

union { int i; char c; } x = { 1 };
x.c;

或:

int i = 1;
FILE *f = tmpfile();
fwrite(&i, sizeof i, 1, f);
rewind(f);
getc(f);

或使用任何可能在后台为您执行此类操作的库函数。如果您使用的是 POSIX 系统或任何其他具有套接字操作的系统,您还可以执行以下操作:

htonl(1) != 1;

但所有这些要么依赖于检查表示,要么依赖于实现中关于目标字节序是什么的硬编码假设。

关于c - 在没有隐式/显式转换的情况下在 C 中查找字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27987943/

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