首页 > 其他分享 >关于字节大小端

关于字节大小端

时间:2022-12-01 15:45:25浏览次数:51  
标签:00 字节 16 int char 关于 大小 进制

来自libhv的检验字节大小端的方法 https://github.com/ithewei/libhv/blob/master/base/hendian.h

static inline int detect_endian() {
    union {
        char c;
        short s;
    } u;
    u.s = 0x1122;
    return u.c ==0x11 ? BIG_ENDIAN : LITTLE_ENDIAN;
}

  • char字符存储空间为一个字节,
  • 16进制的每个字符需要用4位二进制位来表示,,0x0为0000,0xf为1111,即1个16进制数为4位,
  • 如42 4D 38 04 04 00 00 00 00 00 36 04 00 00,每两个16进制数隔开,用意是:因为1个16进制数为4位,两个就是8位,即1个字节,所以这里是14字节,,以字节为单位,容易计数
  • BEFORE DECODE (16 bytes) AFTER DECODE (13 bytes)
  • +------+--------+------+----------------+ +------+----------------+
  • | HDR1 | Length | HDR2 | Actual Content |----->| HDR2 | Actual Content |
  • | 0xCA | 0x000C | 0xFE | "HELLO, WORLD" | | 0xFE | "HELLO, WORLD" |
  • +------+--------+------+----------------+ +------+----------------+
字符 16进制 字节 关系 - 哈哈呵h - 博客园

这里对1个16进制数为什么是半个字节,2个16进制数是1个字节,解释得很透彻。


[https://www.cnblogs.com/52php/p/6114643.html](https://www.cnblogs.com/52php/p/6114643.html)
```c
#include <stdio.h>
#include <stdbool.h>
 
union {
    int number;
    char s;
} test;
 
bool testBigEndin() {
    test.number = 0x01000002;
    return (test.s == 0x01);
}
 
int main(int argc, char **argv) {
    if (testBigEndin()) {
        printf("big");
    } else {
        printf("small");
    }
}

这里给了一个判断大小端而没用指针的方法。

#include <stdio.h>
int main (void)
{
	short i = 0x1122;
	char *a = (char*)(&i);
	printf ("0x%x\n", *(a + 0)); //大端为 0x11 小端为 0x22
	printf ("0x%x\n", *(a + 1));
	return 0;
}
输出结果:
0x22
0x11

低位低地址,高位高地址。
从数组角度讲,a0是低地址,a1是高地址。

#include <stdio.h>
int main (void)
{
	union
	{
		short i;
		char a[2];
	}u;
	u.a[0] = 0x11;
	u.a[1] = 0x22;
	printf ("0x%x\n", u.i);  //0x2211 为小端  0x1122 为大端
	return 0;
}
输出结果:
0x2211

关于指针强制转换

#include<stdio.h>
int main(){
    
    
    
    
    return 0;
}

标签:00,字节,16,int,char,关于,大小,进制
From: https://www.cnblogs.com/lingr7/p/16941623.html

相关文章

  • 9 虚拟机字节码执行引擎_栈帧结构
    目录1初谈执行引擎2运行时栈帧结构2.1局部变量表2.2操作数栈2.3动态连接2.4方法返回地址2.5附加信息1初谈执行引擎一、关于Java虚拟机和计算机系统层面的物理机......
  • 关于账本的数据一致性较好的解决思路
    账本中采用申请单制1.每笔进出账订单都先生成一笔申请单记录金额,进出款类型,2.默认状态未开始,当资金已经消费或者最终返款完成时,申请单完结3.每天执行定时任务对上一......
  • 关于迭代Iterator
    List<ReplenishmentReportVO>missingStockProducts=NewArrayLIst<>;Iterator<ReplenishmentReportVO>itreator=missingStockProducts.iterator();while(itreator.hasNe......
  • 关于 find 命令的15个超级有用的例子
    find 命令用于在Linux命令行中搜索文件和目录。find是功能最强大、使用最频繁的命令之一,同时也是选项最多的命令之一,它有50多个选项,很容易让人弄混了,特别是当它与exec......
  • 关于vm虚拟机网络设置的思考
    问题背景:实验环境要求四台电脑,hostIP如下client:  eth0192.168.4.10/24proxy:  eth0192.168.4.5/24      eth1192.168.2.5/24web1:  eth0192.1......
  • C++ 字符串字母大小写转换
    C++ 字符串字母大小写转换使用algorithm,里面的tolower(转小写)toupper(转大写) #include<iostream>#include<string>usingnamespacestd;#include<algorithm> i......
  • 关于桌面默认地址改到D盘导致D盘所有文件都在桌面显示这件事
    泪目找到的修改方法2.依次展开注册表里的[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserShellFolders],在其下找到desktop,双击打开,将......
  • Electron问题记录01:关于electron的notification在win10下不显示问题
    0.问题描述在学习electron官网的notification例程时,使用官网的代码运行时无法按照预期弹出窗口,在查询官网时发现以下解决方法.官网解决方法:在Windows10上,您的应用......
  • 关于python的copy模块内的浅拷贝和深拷贝
    Python中赋值语句不复制对象,而是在目标和对象之间创建绑定(bindings)关系,即复制的是对象的引用。对于自身可变(如列表)或者包含可变项的集合对象(如嵌套列表),有必要生成......
  • 一个关于序列的游戏——DP综合题
    题目有一个序列,你可以在上面删除符合要求的连续段若干次。每次删除都会得到连续段长度对应的分数。需要符合的要求为:1、相邻两个元素相差为12、如果某个元素不在连续段......