如何解决小端系统和大端系统上的十六进制表示
考虑以下代码:
unsigned char byte = 0x01;
在C/C++
中,十六进制将被视为int
,因此将被扩展到一个以上的字节。因为会有一个以上的字节,所以如果系统使用的字节序少或大,则会起作用。我的问题是这将扩大什么?
如果系统的int
包含4个字节,它将扩展到以下哪个:
0x00000001或0x01000000
字节序会影响将扩展到哪些对象吗?
解决方法
字节序无关紧要。字节序仅与值在内存中的存储方式有关。但是,无论存储方式如何,存储在内存中的值将为0x01。
例如,取值为0x01020304。它可以01 02 03 04
或04 03 02 01
的形式存储在内存中。但是在两种情况下,它的值仍然是0x01020304(或16909060)。
这完全是特定于体系结构的。编译器根据计算机的字节序生成输出。假设您的微处理器是高位优先的,编译器将生成;
char x = 0x01; --> 01,int x = 0x01; --> 00 00 00 01
另一方面,如果您使用针对little-endian的交叉编译器,或者在little-endian机器上编译代码,则会生成该代码;
char x = 0x01; --> 01
int x = 0x01; --> 01 00 00 00
目前,输出没有标准或默认字节序,输出将特定于编译器针对的体系结构。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。