发布日期:2024-11-20 16:34:02 更新时间:2024-11-22 05:52:51 浏览次数:2162
void arg_test(int i, ...); int main(int argc,char *argv[]) { int int_size = _INTSIZEOF(int); printf(int_size=%d\n, int_size); arg_test(0, 4); //argt(,3,4); return 0; } void arg_test(int i, ...) { int j=0; va_list arg_ptr; va_start(arg_ptr, i); printf(&i = %p\n, &i);//印参数i在堆栈中的地址 printf(arg_ptr = %p\n, arg_ptr);//印va_start之后arg_ptr地址 /*这时arg_ptr应该比参数i的地址高sizeof(int)个字节,即指向下一个参数的地址*/ j=*((int *)arg_ptr); printf(%d %d\n, i, j); j=va_arg(arg_ptr, int); printf(arg_ptr = %p\n, arg_ptr);//印va_arg后arg_ptr的地址 /*这时arg_ptr应该比参数i的地址高sizeof(int)个字节,即指向下一个参数的地址,如果已经是最后一个参数,arg_ptr会为NULL*/ va_end(arg_ptr); printf(%d %d\n, i, j); } 说明: int int_size = _INTSIZEOF(int);得到int类型所占字节数 va_start(arg_ptr, i); 得到第一个可变参数地址 根据定义(va_list)&v得到起始参数的地址, 再加上_INTSIZEOF(v) ,就是其实参数下一个参数的地址,即第一个可变参数地址. j=va_arg(arg_ptr, int); 得到第一个可变参数的值,并且arg_ptr指针上移一个_INTSIZEOF(int),即指向下一个可变参数的地址. va_end(arg_ptr);置空arg_ptr,即arg_ptr=(void *)0; 你要是对这个问题,有问题,那你应该不清楚 c 可以处理,变长的参数了吧?、 c 的 printf 的函数原型,你清楚不? int printf(const char *fmt, ...); // 逗,后面,即第二个参数是三个点 vsprintf 的函数原型: int vsprintf(char *s, const char *fmt, va_list arg); 你见过va_list类型了吗?好吧,我给个简单例子 #include int add(int n, ...); int main() { printf(%d\n, add(, ,第一个4,是4个数的意思 */ printf(%d\n, add(, 个数的意思 */ return 0; } int add(int n, ...) /* 该函数返回 n 个 int 数的和,n个int,跟在第一个参数后面,依次列出*/ { int i, sum, tmp; va_list arg; /* 定义 va_list 类型变量 arg */ va_start(arg, n); /* arg初始化,n 是最后一个可见的参数名字 */ for(sum = i = 0; i < n; i){ tmp = va_arg(arg, int); /* 每一次获取一个整数,第二个类型,就是获取数的类型 */ sum = tmp; } va_end(arg); /* 结束之前,end 一下~~ */ return sum; } 我暂时只能给你说这么多了,你试图去理解它吧,如果理解了,就不成问题了;不理解,或是看书,或是问老师、同学,或是hi我,随你~~
ISA卡校验值C的计算 计算步骤b 个字符: 主帐(PAN) 位 卡有效期(EXPIRE DATE) 4位 代码(SERICE CODE) ),转换方法为将每一位数字转换为4位的BC D码,即: 十六进制数字/BCD码 4 0 5 0 6 0 7 0 8 9 A B C E F ,使之成为 Bits的字段, 将该字段分为两个,后 Bits数据为数据块2。 3 用CKA对数据块1加密(ENCRYPTION)。 异或(XOR),并用CKA对结果加密。 5 用CKB对步骤4得出的结果解密(DECRYPTION)。 6 用CKA对步骤5得出的结果加密。 ~9)。 。 得出的数字从左至右排列,步骤8得出的数字放在步骤7得出的数字之后。 步骤9得出结果的前三位数字即为卡的校验值(C)。 测试数据 以下数据可用于编写C算法时检查程序是否正确,其中: CKA= AB CDEF CKB= FEDC BA 位PAN 失效日期代码 C 位PAN 失效日期代码 C 以第一个十六位主帐为例,计算卡校验值的步骤如下: 主帐: 失效日期: 代码: 步骤1: 抽取数据 步骤2: 数据块ISA卡校验值C的计算 块 块 步骤3: 用CKA加密 块 CKA = AB CDEF 结果CC C6BE 步骤的结果,并用CKA对异或结果加密 结果CC C6BE 块 结果 = BE CKA = AB CDEF 结果A C 步骤5: 用CKB对步骤4的结果解密 结果A C CKB = FEDC BA 结果 DB E 步骤6: 用CKA对步骤5的结果加密 结果 DB E CKA = AB CDEF 结果 DD 步骤7: 对步骤6的结果抽取数字 结果 步骤8: 对步骤6的结果抽取十六进制字符,并转换为进制数字(每位减) 抽取结果 = BECD D 结果8 = 3 步骤的数字后面 结果 步骤: 步骤9的结果前3位数字为C ISA卡校验值C的计算 结果 = ISA PIN校验值的计算 计算步骤 ISA PIN校验值的计算包括以下要素: 序 要素 说明 bits) if the PIN erification Key Pair bits) if the PIN erification Key Pair 3. PAN Rightmost digits of the PAN exclude the check digit 4. PK Index 0F 5. Consumer PIN First 4 digits of the consumer PIN PIN校验值即P的计算方法如下: 个字节的十六进制数字串 比特BCD码,用PKA作DES加密(Encryption)运算 3. 将以上结果用PKB作DES解密(Decryption)运算 4. 将以上结果再用PKA作DES加密(Encryption)运算得结果 ~9). 6. 对步骤5得出的结果从左到右抽取出所有的十六进制字符(A~F),并对每一个十六 进制字符减十进制,使之变为数字,例如十六进制B(十进制为)变为1. 得出的数字从左至右排列,步骤6得出的数字放在步骤5得出的数字之后. 8. 步骤7得出结果的前四位数字即为PIN的校验值(P). 测试数据 以下数据可用于编写P算法时检查程序是否正确,其中: PKA = AB CDEF PKB = FEDC BA 位PAN PK Index Consumer PINP ISA PIN校验值P的计算 x F x F 位PAN PK Index Consumer PINP 0 0 x F x F 注:以上表中x为帐之校验值, 效. 以第一个十六位主帐为例,计算卡校验值的步骤如下: 主帐: 4 x (注:x为帐之校验值) PK Index: 2 Consumer PIN: 步骤1:抽取数据组成数据块 结果 步骤2:用PKA作DES加密(Encryption)运算 结果 PKA = AB CDEF 结果AFCA 步骤3:用PKB作DES解密(Decryption)运算 结果AFCA PKB = FEDC BA 结果FB7 C CCDF 步骤4:再用PKA作DES加密(Encryption)运算得结果 结果FB7 C CCDF PKA = AB CDEF结果 DBD ISA PIN校验值P的计算 步骤) 结果 步骤6: 对步骤4的结果抽取十六进制字符,并转换为进制数字(每位减) 抽取结果 = CDBE EBFB D 结果 3 步骤的数字后面 结果 步骤位数字为P 结果
GSKTA/D编程教材 《一》编程的基本概念 《二》常用G代码介绍 《三》单一固定循环 《四》复合型固定循环 《五》用户宏程序 《六》螺纹加工 《七》T代码及刀补 《八》F代码及G 《九》S代码及G (注意:本教材仅供学习参考,实际操作编程时应以广数GSKT车床数控系统使用手册为准) 月 《一》 编程的基本概念: 一个完整的车床加工程序一般用于在一次装夹中按工艺要完成对工件的加工,数控程序包括程序、程序段。 (一) 程序:相当于程序名称,系统通过程序可从存储器中多个程序中识别所要处理的程序,程序由字母O及4位数字组成。 (二) 程序段:相当于一句程序语句,由若干个字段组成,最后是一个分(;)录入时在键入EOB键后自动加上。整个程序由若干个程序段构成,一个程序段用来完成刀具的一个或一组动作,或实现机床的一些功能。 (三) 字段(或称为字):由称为“地址”的单个英语字母加若干位数字组成。根据其功能可分成以下几种类型的字段: ▲程序段:由字母N及数字组成,位于程序段最前面,主要作用是使程序便于阅读,可以省略,但某些特殊程序段(如表示跳转指令的目标程序段)必须标明程序段。 为了便于修改程序时插入新程序段,各句程序段一般可间隔一些数字(如N)。 ▲ 准备功能:即G代码,由字母G及二位数字组成,大多数G代码用以指示刀具的运动。(如G) ▲ 表示尺寸(坐标值)的字段:一般用在G代码字段的后面,为表示运动的G代码提供坐标数据,由一个字母与坐标值(整数或小数)组成。字母包括: 表示绝对坐标:X、Y、Z 表示相对坐标:U、、W 表示园心坐标:I、 J、 K (车床实际使用的坐标只有X、Z,所以Y、、J都用不着) ▼表示进给量的字段:用字母F加进给量值组成,一般用在插补指令的程序段中,规定了插补运动的速度。 ▼S代码:表示主轴速度的字段。用字母S加主轴每分钟转速(或主轴线速度:米/分)组成。 ▼T代码:表示换刀及刀补 ▼辅助功能:用字母M及二位数字组成,表示机床的开、停等。本机床的主要有效M代码为: M:主轴停。 M:关冷却液。 M:程序暂停。(暂停后可按“循环起动”按钮继续运行) M来结束程序。 控制尾架及卡盘的M代码本机床无效。 ▼其他特殊用途的字段,主要用在一些螺纹车削、循环车削的G代码后面,及用户宏程序中。 《二》 常用G代码介绍 (一) 基本知识 G代码的主要功能:直接控制刀具运动。 3个基本概念: ▲插补:数控机床上,刀具根据指令,沿X轴及Z轴的进给运动。运动轨迹有: Z方向的直线用于车园柱面 X方向的直线用于车端面 钭直线用于车园锥面 园弧用于车球面 插补运动的实质,即车床数控加工的基本原理:刀具根据数控系统的指令,沿X轴及Y轴方向分别移动小的一段距离,刀具的实际移动方向为X、Y二个方向的合成,一连串的这种移动组成了刀具的运动轨迹。 最基本的插补指令:G ▲ 模态代码与非模态代码 模态代码:程序中的有关字段一经设置后,在以后的程序段中一直有效,如继续保持该状态,不必重新设置。 非模态代码,即一次性代码,只在本程序段有效。 所有的G代码可分为模态与非模态 ▲ G代码的分组:共四个组 ①组:属一次性代码,主要包括二大类: (暂停)。 ,一条指令要重复循环多次。 ②组:用得最多的一组,主要用于刀具的移动。主要包括以下几类:
水温太高,可能是供水传感器探头错误或出现故障,还有可能是泵阻塞 据经验,是没有检测到持续的火焰信,供气有问题!燃气阀、控制板故障可能性较大! 小问题,就是燃气阀的步进电机卡了,拆开弄一下就可以了,维修的去就直接换新的 水温太高,可能是供水传感器探头错误或出现故障,还有可能是泵阻塞 首先您需要查看一下燃气的压力是不是不够 装有控制燃气的电池是否需要更换 才装的应该在保修期内,赶紧找经销商。看故障代码是燃气阀上步进电机的问题。威能的点还是挺多的,让的给换个燃气阀试试。 据经验,是没有检测到持续的火焰信,供气有问题!燃气阀、控制板故障可能性较大! 供暖温度设置应为度。建议关闭、等待五分钟,重启。 F 燃气阀故障 你先看下自己家的煤气灶能点火吗,是不是没有天然气了? 要么就是燃气阀坏了 燃气阀的故障率挺高的 有的地方燃气不是很干净容易堵塞燃气阀 实在不行就找给你装壁挂炉的... F。 你看看内置水泵是否正常工作? 如果没有解决的话,你可以说的稍详细一点,威能的壁... 水压传感器或者水泵的故障 把电关掉重新启动看下,如果不能启动。就让的人来吧。 当看到锅炉液晶显示屏显示“F”时,请检查锅炉燃气供应情况。如燃气管道阀门是否开?燃气表电池是否欠量?燃气卡是否欠量?燃气灶是否可以点火等。若燃气正常,请按标有“火苗叉”标志的复位键重新启动.
家电维修知识是现代家庭不可或缺的一部分。掌握基本的维修技巧,可以帮助我们快速解决家电故障,减少不必要的开支。
了解家电设备的分类,如电视机、冰箱、洗衣机、空调等,有助于针对不同设备进行维修操作。
您给我们信任,我们给您惊喜。
本文将介绍一些学家电维修的常识知识点,以帮助读者更好地维护和使用家电设备。
发布日期: 2024-11-22 05:52:51