找回密码
 立即注册
查看: 543|回复: 2

各位大师, 帮忙看看, 如何解决不同类型的数据, 统一转换成 long类型.

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2023-11-30 14:54:53 | 显示全部楼层 |阅读模式
各位大师, 帮忙看看, 如何解决不同类型的数据, 统一转换成 long类型.

对 char, int, long, 指针类 p, 都可以前面加 (long)强制转换成 long 类型.

例如:  long dat = (long) a;  // a 可为 char, int, long 变量 和 各种 指针类 数据, 同时支持 整型常数.



怎样将 浮点数 转换成 long 类型?

目前已知的方法是 用指针, 强制转换,

例如:  long dat =  *(long*) &f; // 仅支持浮点数变量, 不支持 浮点数常数.



现在的问题是, 希望能用一种相同的 强制转换 方式, 可将 各种 不同类型的数据, 统一转换成 long类型.

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2023-12-1 11:29:00 | 显示全部楼层
上次杨老师, 发了一个贴子, 对比 C251 和 C51 的 VPRINTF 函数,  C251 上是可重入的,  C51 上是不可重入的,

结果 杨老师 判  C251 完胜 C51 !

且不论 杨老师 用高级别的 16位机 去 PK 8位机, 降维打击, 这完胜的不光采.  我用 DSP 去 PK C251 也完胜

一时兴起, 编写一个 C51上用的 真正可重入的  VPRINTF 函数, 不同于 C51 自带的假重入, C51的重入, 只有两层, 多层同样会出错 !  

此 VPRINTF 可重入函数, 使用多层宏定义,  避开 PRINTF 函数, 格式化字符串和附加的参数, 占用固定存储器的问题, 所有参数和中间变量, 全部放大堆栈中, 实现真正的可重入.

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2023-12-1 11:29:33 | 显示全部楼层
此 VPRINTF 可重入函数, 一般的 整型, 指针型, 字符串 等, 编写的比较 轻松.

难度最大的 是 二进制浮点数 转  十进制浮点数 , 此程序不是一般的难编写, 不是 二进制浮点数 转  十进制浮点数 的算法难,

而是有条件限制 , 除了 受 中断保护 入栈的 十几个寄存器 可用, 其他一切 中间局部变量, 数据缓冲区等, 必须全部都要, 也只能放在 SP堆栈中 !

做到真正的重入, 总之, 一言难尽, 难啊~~~
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-4 17:51 , Processed in 0.113795 second(s), 57 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表