我期待找到一种方法,可以在不进行隐式/显式强制转换,循环,切换,内置函数,宏的情况下找到字节序。我试过了一个代码,但它使用了显式强制转换。
int is_little_endian(){
int temp = 1;
return *(char *) temp;//Returns 1 if it's a little endian machine.
}
[编辑]
它必须在不使用任何转换的情况下完成。我找不到一个问题,我们可以在不强制转换和不使用宏的情况下做到这一点。本文中的隐式转换是指编译器自动转换。从char到int说。
没有所谓的“隐式强制转换”-强制转换是显式运算符。但是,如果您要查找的是一种无需检查对象表示即可观察字节序的方法,则没有办法。字节序纯属表示形式的属性,而不是值的属性,因此,如果您限制自己访问表示形式,则不存在。这就是为什么大多数好的代码都不关心字节序的原因。
如果您确实想要作弊并访问制图表达,但又不想看起来像演员,那么这里有一些想法:
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;
但是,所有这些都依赖于检查表示形式或实现中关于目标字节序是什么的硬编码假设。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句