是否有一种编程方式来检测您是否在大端或小端架构上?我需要能够编写将在Intel或PPC系统上执行的代码并使用完全相同的代码(即没有条件编译).
是否有一行宏定义来确定机器的字节顺序.我使用以下代码,但将其转换为宏将太长.
unsigned char test_endian( void )
{
int test_var = 1;
unsigned char test_endian* = (unsigned char*)&test_var;
return (test_endian[0] == NULL);
}
Run Code Online (Sandbox Code Playgroud) 我的问题是,我需要加载一个二进制文件并使用文件中的单个位.之后,我需要将其保存为字节.
我的主要问题是 - 选择使用什么数据类型 - char或long int?我可以以某种方式使用字符吗?
(注意,在Neon我使用这种数据类型以避免处理16位数据类型之间的转换)
为什么实践中"内移"中的"左移"是"向右移"?
// Values contained in a
// 141 138 145 147 144 140 147 153 154 147 149 146 155 152 147 152
b = vshlq_n_u32(a,8);
// Values contained in b
// 0 141 138 145 0 144 140 147 0 154 147 149 0 155 152 147
b = vshrq_n_u32(a,8);
// Values contained in b
// 138 145 147 0 140 147 153 0 147 149 146 0 152 147 152 0
Run Code Online (Sandbox Code Playgroud)
我记得在使用时会发现相同的情况_mm_slli_si128(虽然不同但是换班后的结果如下所示:
// …Run Code Online (Sandbox Code Playgroud) c++ ×3
endianness ×2
algorithm ×1
architecture ×1
c ×1
intrinsics ×1
io ×1
macros ×1
neon ×1
numbers ×1
shift ×1
sse ×1