time_t的问题

2008年05月26日 星期一 12:29

今天一上午调了一个网络程序,数据包中带有时间戳,我是用time_t来表示的
client用的是winxp + vc8
server用的是linux + gcc

总是在包的持久化和反持久化出问题,原因在于:
gcc中
typedef long time_t;
vc中
typedef __int64 time_t;

一个是4字节,一个是8字节,当然持久化和反持久化的时候对不上号
将time_t全部用long替换,问题解决

错误定位到包的持久化和反持久就花了几个小时,惨痛的教训啊,以后对于不同编译器的typedef也要注意了,看看是不是一样的.
<think>根据用户要求,需要将赋值操作改为先定义变量再赋值。同时保持原有的变量命名规范不变。 原代码是定义的同时进行赋值,现在改为先定义(声明)变量,然后再分别赋值。 注意:用户要求“先定义再赋值”,所以我们将每个变量的定义和赋值分开两步进行。 同时,保持原有的类型转换和逻辑不变。 注意:u1_t_time_h12和u1p_t_ampm这两个变量需要根据前面的变量计算得到,所以它们的赋值要放在相关变量赋值之后。</think>### 先定义后赋值实现 ```c /* 定义变量 */ U2 u2_t_time_y; U1 u1_t_time_m; U1 u1_t_time_d; U1 u1_t_time_h24; U1 u1_t_time_min; U1 u1_t_time_sec; U1 u1_t_time_w; U1 u1_t_time_h12; const U1* u1p_t_ampm; /* 赋值操作 */ u2_t_time_y = (U2)stp_a_time_t->wYear; u1_t_time_m = (U1)stp_a_time_t->wMonth; u1_t_time_d = (U1)stp_a_time_t->wDay; u1_t_time_h24 = (U1)stp_a_time_t->wHour; u1_t_time_min = (U1)stp_a_time_t->wMinute; u1_t_time_sec = (U1)stp_a_time_t->wSecond; u1_t_time_w = (U1)stp_a_time_t->wDayOfWeek; u1_t_time_h12 = (u1_t_time_h24 % 12 == 0) ? 12 : u1_t_time_h24 % 12; // 修复12点显示 u1p_t_ampm = (u1_t_time_h24 >= 12) ? "PM" : "AM"; ``` ### 关键说明 1. **变量定义与赋值分离** - 所有变量先声明(定义)类型 - 随后进行独立赋值操作 - 符合"先定义后使用"原则 2. **类型转换保护** ```mermaid graph LR A[原始时间结构] --> B[类型转换] B --> C{U2 用于年份} B --> D{U1 用于其他} D --> E[确保值域安全] ``` 3. **12小时制处理逻辑** - 特殊处理12点:`u1_t_time_h24 % 12 == 0 ? 12 : ...` - AM/PM判断:基于24小时值判断上下午 - 使用三目运算符保持代码简洁 4. **内存与类型安全** - U1/U2类型确保匹配目标硬件 - 指针u1p_t_ampm指向字符串常量 - 显式类型转换避免隐式转换风险 ### 使用示例 ```c // 打印格式化时间 printf("日期: %u-%02u-%02u %s\n", u2_t_time_y, u1_t_time_m, u1_t_time_d, cpc_s_time_weeken[u1_t_time_w]); printf("时间: %u:%02u:%02u %s\n", u1_t_time_h12, u1_t_time_min, u1_t_time_sec, u1p_t_ampm); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值