Category: 不负韶华

  • 最佳翻译

    人权没了?人全没了? human right? human left?

  • 2020(没想到这居然是魔幻开局)

    (回头看这将是载入史册的事件。亲历一场全球大温疫)

  • 台湾行

    早起寻找网红米线 目标所谓“总统府”, 可凭入台证或台湾通行证免费 国图 从 大中至正 到 自由广场 常凯申 孙中山 花里胡哨的宪兵表演 101 101露台 在101上偶碰延参法师,当时心想哪来的和尚到处跑了旅游,贪恋红恋啊,阿弥陀佛

  • 台湾行

    自由行通行证在8月已停,有幸在此之前申请到签证并办到入台证,会不会是最后一批通过这种方式去旅游的? 飞过中线 网络 NTY 普遍的交通工具–摩托车 可爱的地下通道 108年 红楼 夜市

  • 开启养鱼模式

    3.4 入住 2.27 养鱼先养水

  • Google Protocol Buffers 编码原理

    Protocol buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured data. A Simple Messag 举个栗子, 定义一个proto message 把 a 的值设置为十进制的 150: message Test1 { required int32 a = 1; } 然后将该 message 序列化到 Binary 文件中, 可以看到数据为: 08 96 01 在理解这个些数前需要先了解 Varints Base 128 Varints varints 是一种使用一个或多个字节(byte)表示整型数据的方法。数值越小, 其所占用的字节数越少。(注:类似 varchar) 通常整数用字节表示, 每个字节占 8 位, 而在 varint […]

  • 字节序

    字节序是指多字节数据在计算机内存中存储的顺序或者网络传输时各字节的顺序。 在不同的处理器以不同的方式存放, 主要方式有两种即大端字节序(Big Endian)和小端字节序(Little Endian) 端(endian)的起源 “endian” 一词来源于 Jonathan Swift 在1726年写的讽刺小说 “Gulliver’s Travels”(《格利佛游记》)。小说中,小人国为水煮蛋该从大的一端(Big-End)剥开还是小的一端(Little-End)剥开而争论,并由此曾经发生过6次叛乱,其中一个皇帝送了命,另一个丢了王位。争论的双方分别被称为”大端派”和”小端派”。 1980年, Danny Cohen,一位网络协议的早期开发者,在其著名的论文”On Holy Wars and a Plea for Peace”中,为平息一场关于字节该以什么样的顺序传送的争论,而第一次引用了该词。 什么是 Big Endian 和 Little Endian 大端字节序:在内存中,低地址存放数据的高位,高地址存放数据的低位 小端字节序:在内存中,低地址存放数据的低位,高地址存放数据的高位 LE little-endian 最符合人的思维的字节序, 地址低位存储值的低位, 地址高位存储值的高位 因为从人的第一观感来说, 低位值小, 就应该放在内存地址小的地方, 也即内存地址低位; 反之, 高位值就应该放在内存地址大的地方, 也即内存地址高位 BE big-endian 最直观的字节序, 地址低位存储值的高位, 地址高位存储值的低位 不要考虑对应关系, 只需要把内存地址从左到右按照由低到高的顺序写出, 把值按照通常的高位到低位的顺序写出, 两者对照,一个字节一个字节的填充进去 网络字节序 网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。 […]

  • c/c++ 中 double 和 float 在内存中的存储结构

    浮点数,是指小数点在数据中的位置可以左右移动的数据。 计算机内存中都是以二进制 (0 或 1) 的形式储存数据, 每个 0 或 1 被称为 1 位(bit), 在 x86 CPU 中 1 字节(byte)为 8 位(bit); double 和 float 这两种精度不同的地方是 float 是 4 字节即 32 位, double 是占 8 字节为 64 位。 目前 C/C++ 编译器遵照 IEEE-754(IEEE Standard for Floating-Point Arithmetic) 制定的浮点数表示法来进行 float, double 运算。在计算机中, 浮点数通常被表示成以下格式: |__S__|____E____|________M________| 即为 符号位(Sign) + 指数位(Exponent也称阶码) […]

  • 一个数二进制中1的个数(Hamming weight)

    学习一下 https://en.wikipedia.org/wiki/Hamming_weight: 计算一个数二进制非0的个数,直接的思路就是把所有位1相加即为1的个数 以最简单的情况举例, 一个2位二进制数, 比如11(或10或01), 只要把它的第二位和第一位相加, 即 (n & 1) + (n >> 1) [此算法可以视为除余法, 右移即除2余1相加] 这样如果有复杂点的数, 都可以分割成每相邻的两位进行以上的计算, 即把偶数位1加奇数位1 例如有一个数的二进制 abcd (abcd是0或1),1个数为a+b+c+d 按每相邻两位计算为 [a+b]+[c+d], 即我们要把相邻中的偶数位和奇数位分离出来 所以需要与上一个 0101 该数的奇数位 0b0d = abcd & 0101 该数的偶数位 0a0c = (abcd >> 1) & 0101 这样 0b0d + 0a0c 结果就是每相邻2位一组, 每一组保存的都是最初在这2位的1的个数(假设结果为 efgh, ef为a+b gh为c+d) 取低位两位的1的个数 gh= efgh && […]

  • IP数据报首部校验和算法 [转]

    IP/ICMP/IGMP/TCP/UDP 报文头都有检验和字节, 大小都是2个字节(16bit), 算法相同 对于发送方计算检验和: (1)把IP数据报的首部都置为0,包括校验和字节。 (2)把首部看成以16bit为单位的数字组成,依次进行二进制反码求和。 (3)把得到的结果存入校验和字段中。 对于接收者校验: (1)对于接收的IP报文头部以16bit为单位逐个求和; (2)若结果全为1,则校验正确,否则出错丢弃; 0x0000: 4500 00e5 0000 4000 4011 7592 0ace 22cf E…..@.@.u…”. 0x0010: 0af6 8be3 发送方 4500 + 00e5 + 0000 + 4000 + 4011 + 0000 + 0ace + 22cf + 0af6 + 8be3 = 1 8a6c 0001 + 8a6c = 8a6d 8a6d 反码 7592 […]

  • tcpdump 结果

    IP数据报格式 抓包举例 0x0000: 4500 003c 34c1 4000 4006 4351 ac13 0009 E..