闲聊cc++: 谈内存(大小端,高低字节,高低地址)

JavaScript014

闲聊cc++: 谈内存(大小端,高低字节,高低地址),第1张

c/c++和其他语言最大区别在于: 指针

指针就是内存地址,一旦明白了指针与内存地址相关的内容,那理解其他语言,就易如反掌。

而且你可以把其他语言用的更加好,更加有效率

例如java/js/objc中为什么容器中只能存储引用类型?

如果存储基本数据类型(值类型),为什么会发生效率很低的装箱拆箱行为?

而c#为什么就不会呢?

你怎么才能让不使用的内存尽快被垃圾收集器回收过去?

还有很多涉及内存相关的内容,例如堆分配,栈分配等........

根据经验:

本篇目的:

是不是感觉很绕口啊,特难理解吧!

理解大小端的关键点是明白:

很容易理解 高低地址 了吧,就是书写顺序

高低字节是:左高右低

高低地址是:左低右高

根据大端的定义:

数据的高字节 保存在 内存的低地址 中,而 数据的低字节 保存在 内存的高地址

则内存存储的方式是:

DC是最高字节[ 最左 ],放在内存的最低地址[ 最左 ]

FF是最低字节[ 最右 ],放在内存的最高地址[ 最右 ]

按照这个规则,很容易知道,大端在内存存储的顺序是:

DC|6E|35|FF(和rgba = 0xDC6E35FF一致的顺序)

根据小端的定义:

数据的高字节 保存在 内存的高地址 中,而 数据的低字节 保存在 内存的低地址

则内存存储的方式是:

DC是最高字节[ 最左 ],放在内存的最高地址[ 最右 ]

FF是最低字节[ 最右 ],放在内存的最低地址[ 最左 ]

按照这个规则,很容易知道,小端在内存存储的顺序是:

FF|35|6E|DC(和rgba = 0xDC6E35FF相反的顺序)

先字节后地址:

附:今天老师带队一起写生去 文章我昨天半夜写的

这牵扯一个大小端问题

哪边都能解决

给出C#方案

public static string GetRealHEX(string Q)

{

byte[] B = Encoding.Unicode.GetBytes(Q)

if (0x24 == BitConverter.GetBytes(0x2124)[0])

{

for (int F = B.Length--F > 0)

{

byte T = B[F]

B[F] = B[F - 1]

B[--F] = T

}

}

return BitConverter.ToString(B).Replace("-", string.Empty)

}