hjind1213 发表于 2023-5-17 14:46:29

请帮帮忙谢谢!以下C语言转易语言,谢谢大家!!


{:hug:}请帮帮忙谢谢!以下C语言转易语言,谢谢大家!!{:hug:}
#include <stdio.h>
#include <string.h>

static unsigned value;
void sub1(unsigned para)
{
      value = para;
}

unsigned sub2(void)
{
      value = value * 0x343FD + 0x269EC3;
      return (value>>16) & 0x7fff;
}

void main(void) {
      char UserName;
      inti, len;
      unsigned num;

      printf("Input username:\n");
      gets(UserName);
      len = strlen(UserName);
      num = 0x0D431;
      for(i=0;i<len;i++)
      {
                sub1 ( (unsigned)(unsigned char)UserName ^ 0x14142135 );
                num = ( sub2() + ((num<<16)|(num>>16)) ) ^ 0x27181828;
      }
      sub1(0x75bCD15);
      for(i=0;i<100;i++)
      {
                num = ( sub2() + ((num<<16)|(num>>16)) ) ^ 0x17320508;
      }
      printf("UserName=%s\n", UserName);
      printf("RegisterCode=%ld\n", num);
}       

{:hug:}请帮帮忙谢谢!以下C语言转易语言,谢谢大家!!{:hug:}
以下一组是正确的注册码
用户名:hjind1213
注册码:0357987587
谢谢大家,共同学习

GCC_Kill 发表于 2023-5-19 18:16:58



公共 UserName,num
子程序 sub1(para)
    value = para
结束子程序

函数 sub2()
    value = value * &H343FD + &H269EC3
    返回 (value >> 16) 与 &H7FFF
结束函数

主程序
    输入 "输入用户名:"
    gets UserName
    len = 字符串长度(UserName)
    num = &HD431
    对 i = 0 到 len - 1
      调用 sub1(asc(字符串中取字符(UserName,i)) xor &H14142135)
      num = (sub2() + (num << 16) 或 (num >> 16)) xor &H27181828
    下一步
    调用 sub1(&H75BCD15)
    对 i = 0 到 99
      num = (sub2() + (num << 16) 或 (num >> 16)) xor &H17320508
    下一步
    打印 "用户名=" ; UserName
    打印 "注册码=" ; num
结束主程序


1. C语言的头文件导入变为易语言的无须导入
2. C语言的static关键词变为易语言的公共关键词,代表全局变量
3. C语言的void main()变为易语言的主程序和结束主程序
4. C语言的函数定义变为易语言的子程序和结束子程序
5. C语言的无类型指针变为易语言的字符串
6. C语言的位运算符变为易语言的移位运算符(<<、>>)和或运算符(或)
7. C语言的printf变为易语言的打印, gets变为输入和gets

nihg 发表于 2023-5-17 15:27:32

Declare Sub sub1(ByVal para As UInteger)

Declare Function sub2() As UInteger

Sub main
Dim UserName(99) As Byte
Dim i, len As Integer
Dim num As UInteger
Dim sUserName As String

Print "Input username:"
Line Input sUserName
For i = 0 To Len(sUserName) - 1
    UserName(i) = Asc(Mid(sUserName, i + 1, 1))
Next
len = Len(sUserName)
num = &H0D431UI
For i = 0 To len - 1
    Call sub1((CByte(UserName(i)) Xor &H14142135UI))
    num = (sub2 + ((num << 16) Or (num >> 16))) Xor &H27181828UI
Next
Call sub1(&H75BCD15UI)
For i = 0 To 99
    num = (sub2 + ((num << 16) Or (num >> 16))) Xor &H17320508UI
Next
sUserName = StrConv(UserName, vbUnicode)
sUserName = Left(sUserName, InStr(sUserName, Chr(0)) - 1)
Print "UserName="; sUserName
Print "RegisterCode="; num
End Sub

Sub sub1(ByVal para As UInteger)
Static value As UInteger
value = para
End Sub

Function sub2() As UInteger
Static value As UInteger
value = value * &H343FDUI + &H269EC3UI
sub2 = (value >> 16) And &H7FFFUI
End Function

飞天梦 发表于 2023-5-17 22:53:32

谢谢分享

yuan71058 发表于 2023-5-19 06:30:03

来个红包吧

lras 发表于 2023-5-20 17:39:30

这是把火箭换成推车?

softking 发表于 2023-5-27 08:17:41

这个好像不好转                  
页: [1]
查看完整版本: 请帮帮忙谢谢!以下C语言转易语言,谢谢大家!!