realradiolover 最近的时间轴更新
realradiolover

realradiolover

V2EX 第 440991 号会员,加入于 2019-09-12 16:05:15 +08:00
realradiolover 最近回复了
46 天前
回复了 x97bgt 创建的主题 程序员 大小端存储的疑问
首先,从网卡、内存、磁盘的角度看,传输、保存的永远都是字节流。给字节流中的字节赋予意义,例如数据类型( 32 位整型、浮点数.....)、字符串、位图数据....是应用程序的责任。和数据类型配套衍生出来的是大小端规则。CPU 处理数据前,会一次性读入 16 位或者 32 位或者 64 位数据到高速缓存,再到 ALU 等。大端机 CPU 会认为低比特位存放数值高位,小段机正相反。为了适配 CPU 这种约定,保证 CPU“看到”逻辑上正确的数值,需要事先组织这个数值在内存里的排列。这是大小端机制的来源。

大小端在 bit 层次上就存在的。假设内存地址从左到右增加,0x3 在小端机器上保存为 11000000,在大端机上保存为 00000011,在以太网等电信网络设施中、USB 串口中,按照 0->0->0->0->0->0->1->1 的顺序发送。

所有网卡的驱动,如果主机是小端,会自动转换字节内部的 bit 序(网络传输顺序为大端序);但是 Byte 间的顺序(字节序)保持不变。毕竟网卡只能看到字节流,它不知道也不需要关心这些字节代表的是字符串,还是 uint32_t 。

字节序转换,是应用层的事情(例如常见的 ntohs,ntohl 调用)。字节内部的 bit 序已经由网卡处理好。

容易混淆的是,我们在分析类似问题的时候会用到 16 进制数字,经常把数学意义上的数字,和内存表示法意义上的数字书写混为一谈。数学意义上的数字的书写,永远是左边高位右边低位。内存表示法意义上的数字,一般是左边低地址右边高地址,所以大端小端,写出来是不一样的。

另一个容易混淆的是,我们一般书写 16 进制数字的最小单位是字节,而不是比特。这就意味这它无法表征字节内部的 bit 序。数字 0x1234,在大端机器上的内存表示为 0x12 0x34,在小端机器上的内存表示为 0x34 0x12 。而 0x34 这一个字节,在大端、小端、网络中的内存表示法是一致的:0x34 。如果用二进制内存表示法,区别就很明显了。


楼主的提问是应用程序对字节流的定义,和字节流本身的大小端机制并没有关系。
UNIX 时间戳是绝对的。其度量基准为:从伦敦时间 1970 年 1 月 1 日 0 时开始,到此刻的秒数。

在某一时刻,全球不同地区时区不同,因此钟表时间也不相同(“时差”的来源),但 UNIX 时间戳是一致的。e.g.: 此刻,是北京时间 23:08:00,伦敦时间 15:08:00,美国东部时间 11:08:00,但此刻三个地方的 UNIX 时间戳都是 1626188880 。

同样道理,你获得此刻的 UNIX 时间戳,在全球不同时区,翻译得到的时间也是不同的;几乎所有的操作系统都有“区域,语言”之类的配置项,就是为了根据你的设备所在的时区,来翻译出“合适”的时间。e.g.:手机的“时钟”APP 通过 ntp 授时服务获得此刻的 UNIX 时间戳 1626188880,然后检查手机系统配置的“区域”,如果此刻你在上海,那么时钟显示“23:08:00”;此刻,你在夏威夷的同学,他的手机时钟 APP 也得到了同样的 1626188880,但他的系统区域设置是夏威夷,那么时钟将显示太平洋时间“05:08:00”

由此可见,各国日常生活所使用的时间是不过是表象,是相对的。这是为了照顾人们的生活习惯,午夜一定是 0 点,正午一定是 12 点。因此全球需要一个绝对的基准,一般用 UTC 来度量,计算机科学则使用 unix timestamp.


PS:基于北京时间的时间戳,本身就是一个伪命题。时间戳只有一个全球的绝对的。早期照片文件 EXIF 信息就忽略了这一点,只存了文本而没有时区。造成时间转换的混乱
苹果 /国产怎么设计不重要,国外 /国内设计师和用户的审美也不重要。关键是要通过相互撕逼,宣泄内心的戾气,这就够了。
2020-07-28 11:01:12 +08:00
回复了 elsonwx 创建的主题 生活 [深圳]早上上班时看见路边一个大叔不舒服坐在地上
打击报复是一定会发生的。现在很多维族团伙的脑回路比较奇特:不工作偷东西没什么,但你要阻止我偷,我就宁可倾家荡产甚至进监狱也要弄死你。所以,维族的事情一律报警。
2020-07-22 14:14:27 +08:00
回复了 fancy2020 创建的主题 Figma 想找一款"设计界的 Github",不知道有没有这样的网站
@fancy2020 很正常呀。挂羊头卖狗肉是咱中国的常态,你说“学习”,正常人第一反应肯定是“白嫖”。
2020-05-13 13:49:11 +08:00
回复了 EEer 创建的主题 C++ 看 CTO 封的框架代码 ,忍不住,吐槽……
@nekoyaki 我们中国人有我们自己的思维习惯和江湖规矩,适应不了就不要在中国呆
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4128 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 17ms · UTC 02:27 · PVG 10:27 · LAX 18:27 · JFK 21:27
♥ Do have faith in what you're doing.