总结 2038问题和字节序

NTP协议2036年大限将至?聊聊NTP的“千年虫”与时间戳的底层表示 本文探讨了NTP协议面临的2036年时间戳溢出问题,即NTP的“千年虫”挑战。文章详细解析了NTP时间戳的64位表示法及其局限性,对比了NTP的2036问题与Unix的2038问题,并介绍了NTPv4通过128位日期戳与时代处理的解决方案。此外,还从C语言实现角度分析了NTP时间处理的关键技术。 阅读详情

 

1、2038问题

在vs2005之前的time_t 是32位,即:
time(0)返回系统从1970年1月1日0时0分0秒到当前的秒数,
因为time_t是32位长,所以最大能表示到2038年1月18日,再大则溢出。
在vs2005及更高的版本中,time_t和time(0)等相关数据默认都升级为64位,
若仍旧想使用32位格式存储,可以定义宏_USE_32BIT_TIME_T或强制截断。
最好使用64位,尽管多了一倍的存储空间,但是系统在时间问题上没有了2038的后患。

 

2、字节序问题

字节序是一些内定数据类型如int、short等的高低字节在内存中存放的顺序,
有BIG-ENDIAN(MSB到LSB)、LITTLE-ENDIAN(LSB到MSB)两种,
字节序依赖于于CPU、编程语言和网络等环境。

1、跟CPU有关,每一种CPU不是BIG-ENDIAN就是LITTLE-ENDIAN。
IA架构的CPU中是Little-Endian,而PowerPC、SPARC和Motorola处理器是Big-Endian,
这其实就是所谓的主机字节序。

2、而网络字节序是指数据在网络上传输时是大头还是小头的,在Internet的网络字节序是BIG-ENDIAN。

3、编程语言JAVA在其虚拟机中多字节类型数据的存放顺序是BIG-ENDIAN;
   C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的。
  
4、所以在用C/C++写通信程序时,在发送数据前务必用htonl和htons去把整型和短整型的数据进行从主机字节序
到网络字节序的转换,而接收数据后对于整型和短整型数据则必须调用ntohl和ntohs实现从网络字节序到主机字节序
的转换。如果通信的一方是JAVA程序、一方是C/C++程序时,则需要在C/C++一侧使用以上几个方法进行字节序的转换,
而JAVA一侧,则不需要做任何处理,因为JAVA字节序与网络字节序都是BIG-ENDIAN,只要C/C++一侧能正确进行转换即
可(发送前从主机序到网络序,接收时反变换)。如果通信的双方都是JAVA,则根本不用考虑字节序的问题了。
如果两边都是自己开发的c++系统不考虑服务开放也可以忽略字节序问题,否则就要考虑字节序问题了。

 

3、更正了两个语文错误

“堂吉诃德”的“诃”读“he一声”而不读“ke”
成语“乐此不疲”而不是“乐此不彼”

 

告别手动解析!用Python脚本自动处理RTKLIB的RTCM数据流(支持1005/1006等消息) 本文介绍如何使用Python脚本自动解析RTKLIB的RTCM数据流,支持1005/1006等消息类型,解决手动解析效率低下的问题。通过详细的代码实现和性能优化,帮助工程师高效处理GNSS差分数据,提升工作流程的自动化水平。 阅读详情

相关推荐

C语言跨平台开发必知:int8_t到uint64_t的正确打开方式(附实战代码)

本文深入探讨了C语言跨平台开发中数据类型宽度不一致的痛点,并详细介绍了如何使用int8_t、uint16_t、int64_t等固定宽度整数类型确保代码的确定性与可移植性。文章通过文件操作、网络数据包解析等实战案例,阐述了这些类型在避免数据溢出、保证二进制布局一致以及处理字节序等方面的关键作用,是提升C程序跨平台能力的必备知识。

weixin_29202213的博客 470

时间戳2038问题是什么?如何解决这个问题?底层原理是什么?

超过这个时间戳的计算机系统将无法正确处理日期和时间。它指的是在2038年1月19日03:14:07 UTC之后,使用32位带符号整数来表示时间戳的计算机系统将无法正确处理日期和时间,从而导致系统错误或崩溃。3.使用其他时间表示方式:例如,使用字符串表示时间戳,使用浮点数表示秒数等方式,可以避免时间戳2038问题,但需要修改应用程序来支持新的时间表示方式。1.使用64位时间戳:使用64位整数来表示时间戳,可以解决时间戳2038问题,但需要修改操作系统和应用程序来支持64位时间戳。

长风破浪会有时的博客 7254

C++静态分析工具Cppcheck:新手必备的代码质量守护者

静态代码分析是提升软件质量、预防潜在缺陷的关键技术。其原理是在不运行程序的情况下,通过分析源代码的语法、结构和数据流,识别出可能导致运行时错误、内存泄漏、未定义行为等问题的代码模式。这项技术的核心价值在于,它能发现编译器通常忽略的逻辑错误和安全隐患,帮助开发者在早期阶段消除bug,降低后期调试和维护成本。在C/C++开发领域,由于语言特性复杂、手动内存管理容易出错,静态分析尤为重要。Cppcheck作为一款轻量级、零配置的开源工具,专门针对C/C++设计,能高效检测未初始化变量、数组越界、内存泄漏等常见问题

weixin_33874713的博客 402

隐藏的BUG探讨——从“Y2K”问题到“2038”年问题

前几天在饱览书籍的过程中,饶有兴致的注意到一个在历史上曾经叱咤过全球的严重计算机BUG,于是记录下来,等待以后入坑什么是千年虫(Y2K)问题千年虫-百度百科 计算机2000年问题,又叫做“千年虫”、“电脑千禧年千年虫问题”或“千年危机”。缩写为“Y2K”。是指在某些使用了计算机程序的智能系统(包括计算机系统、自动控制芯片等)中,由于其中的年份只使用两位十进制数来表示,因此当系统进行(或涉及到)跨

摩尔的博客 1万+

22、Linux网络与时间的数字取证分析

本文详细探讨了Linux系统中与数字取证相关的网络代理和时间配置问题。内容涵盖常见代理服务器(如Squid、Nginx)的使用及潜在恶意用途,如实时钓鱼和僵尸网络控制;深入解析Linux时间格式、时区配置、夏令时和闰秒的影响,以及时间同步机制(如NTP、DCF77、GPS);重点分析时间戳在数字取证中的作用与挑战,并介绍构建法医超级时间线的方法与工具(如log2timeline/plaso)。文章旨在帮助调查人员准确重建事件时间线,识别潜在的恶意活动,并应对时钟漂移、反法医手段等取证难题。

mm9012的博客 80

跨平台时间戳转换为日期时间的编程指南

时间戳由三部分组成:纪元起点、时间单位和计数值。时间单位可以是秒或毫秒,而计数值通常是自纪元以来所经过的时间量。例如,一个时间戳值为1557211055.123可能表示自1970年1月1日以来1,557,211,055秒又123毫秒的时间点。

weixin_35755640的博客 1205

时间戳,2038年计算机要面临的问题(代码演示)

本章介绍时间戳,时间戳的定义、时间戳问题、危机详细分析、计算机2038年要面临的问题、代码模拟以及回顾2000年千年虫危机。

m0_71559726的博客 5976

基于STM32F407的SNTP网络授时与RTC实时时钟实验(裸机项目)

UTC是由国际权度局(BIPM)维护的一种高精度时间尺度,其基础来源于全球分布的数百台铯原子钟组成的“国际原子时”(TAI, International Atomic Time)。TAI提供了一个完全均匀、不受地球自转变化影响的时间流,每秒定义为铯-133原子基态超精细跃迁9,192,631,770个周期。但由于地球自转速度存在长期减缓趋势(主要由潮汐摩擦引起),TAI与基于地球自转的“世界时”(UT1)之间会逐渐产生偏差。

weixin_42315569的博客 621

time_t c语言 2038,什么是2038问题?

什么是2038问题不知道你有没有听过2038问题?无论你是否听过,本文将带你认识什么是2038问题。Unix时间戳定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。而在C语言中,常用time_t来表示。举个例子:#include#includeintmain(void){time_trawtime=10;//t...

weixin_35668334的博客 1891

OrthoFinder功能、流程和文件注释

OrthoFinder 的标准输出包括:直系同源组,直系同源基因,有根基因树,解析基因树,无根物种树、有根物种树,基因重复事件以及相关的统计数据。

hs6605015的博客 3046

KEIL调试实战:解决‘TRACE HW not present‘错误的完整指南

本文详细解析了KEIL调试中常见的'TRACE HW not present'错误,该错误通常由芯片或ST-LINK调试器不支持高级指令跟踪功能引发。文章提供了从禁用Trace功能到更新固件、检查硬件连接等完整的解决步骤,帮助开发者快速恢复STM32的正常调试,是解决KEIL调试连接问题的实用指南。

weixin_29192365的博客 360

Unix 时间戳2038年问题到底是什么意思?为什么会存在这个问题?底层原理是什么?

具体来说,在2038年1月19日星期二03:14:07 UTC之后的一秒钟,即时间戳达到2,147,483,647 (+2^31 - 1),下一个秒将变为-2,147,483,648 (-(2^31)),导致时间和日期突然跳回到1901年12月13日星期五20:45:52 UTC。在许多系统中,这个时间戳通常被存储为一个有符号的32位整数。Unix时间戳2038年问题(也被称为“2038年问题”或“Year 2038 problem”)指的是当这个32位整数达到它的最大值时会发生溢出的问题。

长风破浪会有时的博客 1968

Windows 10/11下R与RStudio最新版安装避坑指南(含镜像加速配置)

本文提供了Windows 10/11系统下R与RStudio最新版的详细安装指南,包含镜像加速配置和常见问题解决方案。通过分步教程帮助用户避开安装陷阱,优化开发环境设置,特别适合国内用户快速搭建高效的数据分析平台。

weixin_29065959的博客 1005

linux中time_t类型,什么是time_t typedef到底是什么?

小智..12答案肯定是特定于实现的.要明确找到您的平台/编译器,只需在代码中的某处添加此输出:printf ("sizeof time_t is: %d\n", sizeof(time_t));如果答案是4(32位)并且您的数据要超过2038,那么您有25年的时间来迁移代码.如果您将数据存储为字符串,那么您的数据就可以了,即使它很简单:FILE *stream = [stream file poi...

weixin_35899659的博客 329

光储微电网混合储能系统的控制策略

随着社会生产力的不断提高,对不可再生资源的大量消耗,人们已经意识到发展可再生能源的重要性,因此微电网技术作为再生能源利用的有效形式被快速发展。蓄电池容量无限大是传统光储微电网混合储能系统控制策略一种理想形式,但实际上蓄电池的容量是有限度的,传统控制策略在蓄电池剩余电量达到阖值时将无法正常使用,由此提出了光储微电网混合储能系统的新型控制策略,又结合实际情况,对开关进行了改进,利用开关与二极管并联,使其拥有四种工作状态,当储能元件剩余电量达到阈值时,可自动恢复电量降低成本,提高并输出电池电能质量。

nhkg888的博客 1739

手把手配置:用Synopsys VDK为英飞凌TC4x系列MCU做虚拟原型开发

本文详细介绍了如何使用Synopsys VDK为英飞凌TC4x系列MCU进行虚拟原型开发,涵盖开发环境搭建、关键外设虚拟化配置、AUTOSAR栈集成及虚拟调试与性能调优全流程。通过虚拟原型技术,开发者可提前6-12个月启动软件开发,显著提升汽车电子项目的开发效率。

weixin_30606461的博客 291

理解ext4,第二部分时间戳(Timestamps)

准备环境 首先,在EXT4文件系统下,创建另一个测试文件 # echo Time for knowledge >testfile # touch -a -t 211101231917.42 testfile # touch -m -t 204005160308.19 testfile 使用touch命令可以直接修改文件的atime(最后访问时间)、mtime(最后修改时间),这...

yuanlanjun 412

ABAQUS应用15——Abaqus软件中边界条件与力学中自由度的关系

核心关系:Abaqus通过约束自由度实现边界条件,自由度类型由单元决定。正确设置步骤:确定模型类型(实体/梁/壳)。识别节点的自由度(平动或转动)。根据实际约束施加对应的自由度限制。验证:通过检查变形模式、反力分布等确认边界条件合理性。正确理解自由度与边界条件的关系,是确保有限元模型准确模拟实际物理行为的关键。

George的博客 1544

别再傻傻分不清了!C语言编程中bit、Byte、Word这些单位到底怎么用?

本文深入解析C语言编程中bit、Byte、Word等存储单位的核心概念与实际应用,帮助开发者避免常见陷阱。从基础理论到实战技巧,涵盖位运算、内存对齐、数据类型溢出等关键知识点,特别适合嵌入式开发和网络编程场景。掌握这些单位的使用方法,能显著提升代码效率和稳定性。

weixin_30642869的博客 195

【C#程序员入门AI】必知的一些知识

2026年C#调用AI,核心就4个概念+3种方式4个概念:大模型(大脑)、嵌入(数字密码)、向量(载体)、Agent(超级助理)3种方式:云端API(快)、本地模型(隐私)、混合部署(最佳)不用怕复杂,跟着这个思路走,你就能从“AI小白”变成“C# AI开发能手”,把AI集成到你的.NET项目里,提升效率、创造价值!

人工智能AI技术 410

零基础入门转录组数据可视化——绘制差异小提琴图(常规)

转录组数据可视化之一,先介绍相关基础知识,其次用实际案例为基础,由浅入深介绍差异小提琴图绘制的全过程,包括内容有相关代码和截屏。

呆猪儿的博客 635

Rsysstat数据文件格式解析:二进制兼容性与迁移策略

前往项目官网免费下载:[https://ar.openeuler.org/ar/](https://ar.openeuler.org/ar/?utm_source=csdn_blog) Rsysstat作为openEuler系统中基于Rust开发的系统监控工具,其数据文件格式设计直接关系到系统监控数据的可靠性和跨版本兼容性。本文将深入解析Rsysstat二进制数据文件的格式规范,重点探讨不同版本

gitblog_06837的博客 176

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

NTP v4 协议解析:从 1900 到 1970 的 2208988800 秒偏移量计算与代码实现

本文深入解析NTPv4协议中2208988800秒偏移量的数学原理与工程实现,详细介绍了从1900到1970年的时间计算方法和代码实现。探讨了NTP时间戳的二进制结构、客户端核心算法及多平台集成方案,为构建高精度网络时间同步系统提供实践指导。

weixin_30292843的博客 404

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

linux结构数组长度,SylixOS中时间结构体探究

1. 相关名词解释1.1 什么是timeval结构体timeval结构体在SylixOS系统中的定义如程序清单1.1所示:程序清单1.1 timeval结构体定义structtimeval{time_ttv_sec;/*seconds*/LONGtv_usec;...

weixin_35158372的博客 353

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

嵌入式 C语言 utc 时间接收发送格式选择

格式:“hhmmss.sss”(时间) + “ddmmyy”(日期),如"123456.789,060624"。格式:uint32_t 或 uint64_t(自1970-01-01 00:00:00 UTC的秒数/毫秒数)格式:“YYYY-MM-DDTHH:MM:SSZ”(如"2024-06-06T12:34:56Z")示例:1717692805(秒级)或 1717692805123(毫秒级)性能优化:避免频繁字符串操作(可预生成格式模板)。时区处理:始终使用UTC,避免本地时区转换。

haojie 680

branca token java_Branca Token:一款经过认证加密的安全API令牌

今天给大家介绍的是一款名叫Branca的加密令牌,Branca使用了现代密码学算法来对API令牌进行认证和加密,并可用于多种在线服务之中。工具介绍Branca是一种易于使用的令牌格式,并且它的易于使用并不是以牺牲安全性换取来的。它使用了IETF XChaCha20-Poly1305 AEAD对称加密算法来生成防篡改的加密令牌,Payload本身是任意字节序列,你可以使用JSON对象、明文字符串或任...

weixin_34369789的博客 129
上一篇: C++标准库头文件介绍
下一篇: ASCII 表(0~255)
UU_Yang
博客等级 码龄23年 926粉丝 213原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值