开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 381|回复: 6
收起左侧

[完成] 一个公式 C转E

 关闭 [复制链接]
结帖率:77% (10/13)
发表于 2024-8-24 19:42:05 | 显示全部楼层 |阅读模式   广东省东莞市
400精币
#include <stdio.h>
char in_array[100];
unsigned char out_array[100];
char result_array[50];
char ascii_array[]="0123456789ABCDEF";
char string_to_hex(char string1,char string2)
{
        char hex = 0;
        if(string1 >= 'A' && string1 <= 'F')
                hex = string1 - 0x37;
        else
                if(string1 >= '0' && string1 <= '9')
                        hex = string1 - 0x30;
        hex = hex * 0x10;
        if(string2 >= 'A' && string2 <= 'F')
                hex = hex + (string2 - 0x37);
        else
                if(string2 >= '0' && string2 <= '9')
                        hex = hex + (string2 - 0x30);
        return hex;
}
void calculate()
{
        int i,j,num = 0;
        unsigned char quotient,remainder,A,B;
        scanf("%s", in_array);
        printf("输入的ID: %s\n", in_array);
        for(i=0;i<100;i++)
        {
                if(in_array[i * 2] != 0)
                {
                        result_array[num] = string_to_hex(in_array[i * 2],in_array[i * 2 + 1]);
                        num++;
                }
        }
        for(i=0;i<num;i++)
        {
                out_array = ~result_array;
                for(j=0;j<(i % 8);j++)
                {
                        if((out_array & 0x80) == 0x80)
                                out_array = (out_array << 1) | 0x01;
                        else
                                out_array = out_array << 1;
                }
                quotient = out_array / 8;
                remainder = out_array % 8;
                out_array = (remainder << 5) + quotient;
                if((out_array & 0x80) == 0x80 && (out_array & 0x01) == 0x00)
                        out_array = out_array ^ 0x56;
                if((out_array & 0x80) == 0x00 && (out_array & 0x01) == 0x01)
                        out_array = out_array ^ 0x6a;
                A = (out_array & 0x60) >> 4;
                B = (out_array & 0x06) << 4;
                out_array = out_array & 0x99;
                out_array = out_array | A |B;
        }
        printf("输出的ID: ");
        for(i=0;i<num;i++)
        {
                printf("%c",ascii_array[out_array / 0x10]);
                printf("%c",ascii_array[out_array % 0x10]);
        }
        printf("\n加“S60”前缀的ID:  ");
        printf("%c",ascii_array['S' / 0x10]);
        printf("%c",ascii_array['S' % 0x10]);
        printf("%c",ascii_array['6' / 0x10]);
        printf("%c",ascii_array['6' % 0x10]);
        printf("%c",ascii_array['0' / 0x10]);
        printf("%c",ascii_array['0' % 0x10]);
        for(i=0;i<num;i++)
        {
                printf("%c",ascii_array[out_array / 0x10]);
                printf("%c",ascii_array[out_array % 0x10]);
        }
        printf("\n加“S61”前缀的ID:  ");
        printf("%c",ascii_array['S' / 0x10]);
        printf("%c",ascii_array['S' % 0x10]);
        printf("%c",ascii_array['6' / 0x10]);
        printf("%c",ascii_array['6' % 0x10]);
        printf("%c",ascii_array['1' / 0x10]);
        printf("%c",ascii_array['1' % 0x10]);
        for(i=0;i<num;i++)
        {
                printf("%c",ascii_array[out_array / 0x10]);
                printf("%c",ascii_array[out_array % 0x10]);
        }
}
int main()
{
        calculate();
        return 0;
}



VX截图_20240824194136.png



补充内容 (2024-8-24 21:30):
100红包解决,可以做的加我v       WYGPQ19211

最佳答案

查看完整内容

除了其他人提到的丢失了,这段代码本身也有bug,你直接翻译过去是运行不了的。需要修正下标越界的问题: [e=1].版本 2 .支持库 spec .程序集 窗口程序集_启动窗口 .子程序 string_to_hex, 字节型 .参数 string1, 字节型 .参数 string2, 字节型 .局部变量 hex, 字节型 .如果 (string1 ≥ 65 且 string1 ≤ 70) hex = string1 - 55 .否则 .如果真 (string1 ≥ 48 且 string2 ≤ 57) hex = string1 - 48 ...

评分

参与人数 1好评 +1 收起 理由
zainex + 1 红包已签收

查看全部评分

结帖率:100% (1/1)
发表于 2024-8-24 19:42:06 | 显示全部楼层   浙江省温州市
除了其他人提到的丢失了,这段代码本身也有bug,你直接翻译过去是运行不了的。需要修正下标越界的问题:

  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
string_to_hex字节型 
参数名类 型参考可空数组备 注
string1字节型
string2字节型
变量名类 型静态数组备 注
hex字节型 
如果 (string1 ≥ 65 string1 ≤ 70)
hex = string1 - 55
如果真 (string1 ≥ 48 string2 ≤ 57)
hex = string1 - 48

hex = hex × 16
如果 (string2 ≥ 65 string2 ≤ 70)
hex = hex + string2 - 55
如果真 (string2 ≥ 48 string2 ≤ 57)
hex = hex + string2 - 48

返回 (hex)
子程序名返回值类型公开备 注
calculate  
参数名类 型参考可空数组备 注
text文本型
ID文本型
S60ID文本型
S61ID文本型
变量名类 型静态数组备 注
num整数型 
i整数型 
in_array字节集 
result_array字节集 
out_array字节集 
ascii_array字节集 
length整数型 
quotient字节型 
remainder字节型 
A整数型 
B整数型 
ascii_array = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70 }
num = 1
in_array = 到字节集 (text){ 0 }
out_array = 取空白字节集 (100)
result_array = 取空白字节集 (50)
length = 取字节集长度 (in_array)
i = 0
判断循环首 (i × 2 + 1 ≤ length)
如果真 (in_array [i × 2 + 1] ≠ 0)
result_array [num]string_to_hex (in_array [i × 2 + 1], in_array [i × 2 + 2])
num = num + 1
i = i + 1
判断循环尾 ()
num = num - 1
变量循环首 (1, num, 1, i)
out_array [i]位取反 (result_array [i])
变量循环首 (1, (i - 1) % 8, 1, )
如果 (位与 (out_array [i], 128) = 128)
out_array [i]位或 (左移 (out_array [i], 1), 1)
out_array [i]左移 (out_array [i], 1)

变量循环尾 ()
quotient = out_array [i] ÷ 8
remainder = out_array [i] % 8
out_array [i]左移 (remainder, 5) + quotient
如果真 (位与 (out_array [i], 128) = 128 位与 (out_array [i], 1) = 0)
out_array [i]位异或 (out_array [i], 86)
如果真 (位与 (out_array [i], 128) = 0 位与 (out_array [i], 1) = 1)
out_array [i]位异或 (out_array [i], 106)
A = 右移 (位与 (out_array [i], 96), 4)
B = 左移 (位与 (out_array [i], 6), 4)
out_array [i]位与 (out_array [i], 153)
out_array [i]位或 (位或 (out_array [i], A), B)
变量循环尾 ()
计次循环首 (num, i)
ID = ID + 字符 (ascii_array [out_array [i] ÷ 16 + 1])
ID = ID + 字符 (ascii_array [out_array [i] % 16 + 1])
计次循环尾 ()
S60ID = S60ID + 字符 (ascii_array [83 ÷ 16 + 1])
S60ID = S60ID + 字符 (ascii_array [83 % 16 + 1])
S60ID = S60ID + 字符 (ascii_array [54 ÷ 16 + 1])
S60ID = S60ID + 字符 (ascii_array [54 % 16 + 1])
S61ID = S60ID
S60ID = S60ID + 字符 (ascii_array [48 ÷ 16 + 1])
S60ID = S60ID + 字符 (ascii_array [48 % 16 + 1])
S60ID = S60ID + ID
S61ID = S61ID + 字符 (ascii_array [49 ÷ 16 + 1])
S61ID = S61ID + 字符 (ascii_array [49 % 16 + 1])
S61ID = S61ID + ID
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
ID文本型 
S60ID文本型 
S61ID文本型 
calculate (“55555”, ID, S60ID, S61ID)
调试输出 (“输出的ID: ” + ID)
调试输出 (“加 'S60' 前缀的ID:  ” + S60ID)
调试输出 (“加 'S61' 前缀的ID:  ” + S61ID)


i支持库列表   支持库注释   
spec特殊功能支持库


点评

这种代码直接用C扣汇编或者编译DLL最省事 啥下标不下标的 讲效率最多两循环就完事了~   广东省揭阳市  详情 回复 发表于 2024-8-24 23:27

评分

参与人数 1荣誉 +1 收起 理由
笨潴 + 1 热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻!

查看全部评分

回复

使用道具 举报

签到天数: 19 天

发表于 2024-8-24 20:55:44 | 显示全部楼层   河北省石家庄市
你的代码在那个网页运行不了,不然还是可以调试下的

点评

混这么多年的论坛 这个代码都看不出哪里有问题啊~ 肯定是[ i ] 啊~ 修复了一下是可以跑的 结果也一样 懒得翻译~   广东省揭阳市  详情 回复 发表于 2024-8-24 22:10
回复

使用道具 举报

结帖率:77% (10/13)
 楼主| 发表于 2024-8-24 21:28:09 | 显示全部楼层   广东省东莞市
番茄吧 发表于 2024-8-24 20:55
你的代码在那个网页运行不了,不然还是可以调试下的

可以运行的,我都截图了呀
回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 20 天

发表于 2024-8-24 21:44:01 | 显示全部楼层   广东省深圳市
228245280 发表于 2024-8-24 21:28
可以运行的,我都截图了呀

运行不了,应该是复制到论坛的时候有些字符被吃掉了导致的,以前我也有过这种情况,不信你自己复制你网页上这段代码去运行
回复

使用道具 举报

签到天数: 19 天

发表于 2024-8-24 22:10:22 | 显示全部楼层   广东省揭阳市
番茄吧 发表于 2024-8-24 20:55
你的代码在那个网页运行不了,不然还是可以调试下的

混这么多年的论坛 这个代码都看不出哪里有问题啊~

肯定是[    i  ] 啊~

修复了一下是可以跑的 结果也一样 懒得翻译~

评分

参与人数 1好评 +1 精币 +3 收起 理由
番茄吧 + 1 + 3 YYDS~!

查看全部评分

回复

使用道具 举报

签到天数: 19 天

发表于 2024-8-24 23:27:41 | 显示全部楼层   广东省揭阳市
zainex 发表于 2024-8-24 19:42
除了其他人提到的丢失了,这段代码本身也有bug,你直接翻译过去是运行不了的。需要修正下标越界的问题:

[ ...

这种代码直接用C扣汇编或者编译DLL最省事 啥下标不下标的 讲效率最多两循环就完事了~

回复

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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