LAOXU 发表于 2023-11-30 14:54:53

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

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

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

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



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

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

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



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

LAOXU 发表于 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 函数, 格式化字符串和附加的参数, 占用固定存储器的问题, 所有参数和中间变量, 全部放大堆栈中, 实现真正的可重入.

LAOXU 发表于 2023-12-1 11:29:33

此 VPRINTF 可重入函数, 一般的 整型, 指针型, 字符串 等, 编写的比较 轻松.

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

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

做到真正的重入, 总之, 一言难尽, 难啊~~~
页: [1]
查看完整版本: 各位大师, 帮忙看看, 如何解决不同类型的数据, 统一转换成 long类型.