/*************************************************************************
* calculate MAC,Lisence,Checksum and generate muti-file
* 声明:
* 1. 以升序的方式批量生成MAC地址方法;
* 2. 以升序、降序的方式批量生成数字形式的Lisence方法;
* 3. 以累加的方式计算MAC地址、Lisence的Checksum;
* 4. 不提供源数据处理文件,仅仅是处理数据代码;
* 5. 本软件主要是为后续软件开发提供更好的解决数据处理的方式。
* 6. 本人并没有对代码进行优化,主要是考虑到保留编写代码过程中的一些细节。
*
* 2015-8-24 晴 深圳 南山平山村 曾剑锋
************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h> #define debug #ifdef debug
#define Debug(...) fprintf(stdout,"debug: " __VA_ARGS__);
#else
#define Debug(...)
#endif int htoi( char s[] );
int createDir( const char *sPathName );
int changeLisenceByte( char * lisenceByte, int number );
void calculateNextMacAddress( int mac[], int i );
void calculateNextLisence( char lisence[], int i ); int main ( int argc, char ** argv ) { int i = ;
int ret = ;
int count = ;
int mac[] = {};
char lisence[] = {};
FILE *mtd5OutFile = NULL;
FILE *mtd6OutFile = NULL;
char readBuffer[] = {}; if ( argc != ) { // check arguments number
printf ( " USAGE:\n" );
printf ( " macLis <mac> <lisence> <count>\n" );
printf ( " example:\n" );
printf ( " macLis 11:22:33:44:55:66 20150609622300214 10 \n" );
return -;
} printf ( "mac : %s\n", argv[] );
printf ( "lisence : %s\n", argv[] );
printf ( "count : %s\n", argv[] ); for ( i = ; i < ; i++ ) {
argv[][ ( i + ) * - ] = '\0'; // change ':' to '\0'
mac[i] = htoi ( argv[] + ( i * ) );
}
Debug ( "mac : %2x:%2x:%2x:%2x:%2x:%2x\n", mac[], mac[], mac[], mac[], mac[], mac[] ); memcpy ( lisence, argv[], sizeof(lisence) - );
Debug ( "lisence : %s\n", lisence ); count = atoi ( argv[] ); // how many diretory to generate
Debug ( "count : %d\n", count); FILE *mtd5SourceFile = fopen ( "temp5", "rb" ); // open input file with binary
FILE *mtd6SourceFile = fopen ( "temp6", "rb" ); char dirPath[] = {};
char outMtd5FilePath[] = {};
char outMtd6FilePath[] = {};
char macString[] = {};
long sum = ; for ( i = ; i < count ; i++ ) { sprintf ( dirPath, "%03d", i ); // generator diretory
sprintf ( outMtd5FilePath, "%03d/temp5", i ); // generator temp5 file
sprintf ( outMtd6FilePath, "%03d/temp6", i ); // generator temp6 file createDir( dirPath );
mtd5OutFile = fopen ( outMtd5FilePath, "w+b" ); // open output file with binary
mtd6OutFile = fopen ( outMtd6FilePath, "w+b" ); rewind ( mtd5SourceFile ); // go head
rewind ( mtd6SourceFile ); // copy file content
while ( ret = fread ( readBuffer, , sizeof(readBuffer), mtd5SourceFile ) )
fwrite ( readBuffer, , sizeof(readBuffer), mtd5OutFile ); // copy file content
while ( ret = fread ( readBuffer, , sizeof(readBuffer), mtd6SourceFile ) )
fwrite ( readBuffer, , sizeof(readBuffer), mtd6OutFile ); // generate mac string and write to file
sprintf ( macString, "%c%c%c%c%c%c", mac[], mac[], mac[], mac[], mac[], mac[] );
fseek(mtd5OutFile, (0x670) + , SEEK_SET);
fwrite ( macString, , , mtd5OutFile );
fseek(mtd6OutFile, (0x30) + , SEEK_SET);
fwrite ( macString, , , mtd6OutFile ); // write Lisence number to file
fseek(mtd5OutFile, (0x680) + , SEEK_SET);
fwrite ( lisence, , , mtd5OutFile );
fseek(mtd6OutFile, (0x40) + , SEEK_SET);
fwrite ( lisence, , , mtd6OutFile ); // clear the data has used
bzero ( dirPath, sizeof(dirPath) );
bzero ( outMtd5FilePath, sizeof(outMtd5FilePath) );
bzero ( outMtd6FilePath, sizeof(outMtd5FilePath) ); // change MAC address with increase number 1
calculateNextMacAddress( mac, );
// change lisence with decrease number 1
calculateNextLisence( lisence, - ); /**
* go to calculate checksum
*/ // read check data from file
bzero ( readBuffer, sizeof(readBuffer) );
fseek ( mtd5OutFile, (0x640) + 0x0d, SEEK_SET );
fread ( readBuffer, , *, mtd5OutFile); // add all data as checksum, be carefull to use unsigned char to keep data was byte
int j = ;
sum = ;
for ( j = ; j < ( * ); j++ )
sum += ( unsigned char ) readBuffer[j]; // must type change to keep is positive
char checkSum[] = {};
sprintf ( checkSum, "%04x", sum );
Debug ( " temp5 checkSum: %s\n", checkSum ); // write checksum to file
fseek ( mtd5OutFile, (0x640) + 0x08, SEEK_SET );
fwrite ( &sum, , , mtd5OutFile); bzero ( readBuffer, sizeof(readBuffer) );
bzero ( checkSum, sizeof(checkSum) ); // work way as above
fseek ( mtd6OutFile, (0x000) + 0x09, SEEK_SET );
fread ( readBuffer, , *, mtd6OutFile); sum = ;
for ( j = ; j < ( * ); j++ )
sum += ( unsigned char ) readBuffer[j]; // must type change to keep is positive
sprintf ( checkSum, "%04x", sum );
Debug ( " temp6 checkSum: %s\n", checkSum ); fseek ( mtd6OutFile, (0x000) + 0x04, SEEK_SET );
fwrite ( &sum, , , mtd6OutFile); bzero ( readBuffer, sizeof(readBuffer) ); // flush to file and close
fflush ( mtd5OutFile );
fclose ( mtd5OutFile ); fflush ( mtd6OutFile );
fclose ( mtd6OutFile );
} fclose ( mtd5SourceFile );
fclose ( mtd6SourceFile ); return ;
} int htoi(char s[])
{
int i;
int n = ; // skip "0x" or "0X"
if (s[] == '' && (s[]=='x' || s[]=='X')) {
i = ;
} else {
i = ;
} for (; (s[i] >= '' && s[i] <= '') || (s[i] >= 'a' && s[i] <= 'z') || (s[i] >='A' && s[i] <= 'Z'); ++i) { if (tolower(s[i]) > '') {
n = * n + ( + tolower(s[i]) - 'a');
} else {
n = * n + (tolower(s[i]) - '');
} } return n;
} int createDir(const char *sPathName)
{
char DirName[];
int i;
int len = strlen ( DirName ); strcpy ( DirName, sPathName ); if ( DirName[ len- ] != '/' )
strcat ( DirName, "/" ); len = strlen ( DirName ); for ( i = ; i < len; i++ ) {
if ( DirName[i] == '/' ) {
DirName[i] = ;
if( access ( DirName, NULL ) != ) {
if(mkdir(DirName, )==-) {
perror("mkdir error");
return -;
}
}
DirName[i] = '/';
}
} return ;
} /**
* i: this can only be positive
*/
void calculateNextMacAddress( int mac[], int i ) { int macByte5 = ( i + mac[] ) % ;
int macByte4 = ( ( i + mac[] ) / + mac[] ) % ;
int macByte3 = ( ( ( ( i + mac[] ) / ) + mac[] ) / + mac[] ) % ;
int macByte2 = ( ( ( ( ( i + mac[] ) / ) + mac[] ) / + mac[] ) / + mac[] ) % ;
int macByte1 = ( ( ( ( ( ( i + mac[] ) / ) + mac[] ) / + mac[] ) / + mac[] ) / + mac[] ) % ;
int macByte0 = ( ( ( ( ( ( ( i + mac[] ) / ) + mac[] ) / + mac[] ) / + mac[] ) / + mac[] ) / + mac[] ) % ; mac[] = macByte0;
mac[] = macByte1;
mac[] = macByte2;
mac[] = macByte3;
mac[] = macByte4;
mac[] = macByte5; Debug ( "calculate next Mac : %02x:%02x:%02x:%02x:%02x:%02x\n", macByte0, macByte1, macByte2, macByte3, macByte4, macByte5 );
} void calculateNextLisence( char lisence[], int i ) {
int tmp = ;
tmp = changeLisenceByte( &lisence[], i );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp );
tmp = changeLisenceByte( &lisence[], tmp ); Debug ( "calculate next lisence : %s\n", lisence );
} /**
* number: this can be positive or negative
*/
int changeLisenceByte( char * lisenceByte, int number ) {
int tmp = ;
if ( ( lisenceByte[] - ) + number < ) {
tmp = ( ( lisenceByte[] - ) + number ) / - ;
lisenceByte[] = ( + ( ( lisenceByte[] - ) + number ) % ) + ;
} else {
tmp = ( ( lisenceByte[] - ) + number ) / ;
lisenceByte[] = ( ( lisenceByte[] - ) + number ) % + ;
} return tmp;
}

calculate MAC,Lisence,Checksum and generate muti-file的更多相关文章

  1. 【MySQL】InnoDB: Error: checksum mismatch in data file 报错

    参考:http://www.jb51.net/article/66951.htm 用5.7版本启动原5.5实例后,再用5.5启动出现以下报错 InnoDB: Error: checksum misma ...

  2. Generate BKS File( Bouncy Castle KeyStore)

    echo "Enter BKS output file name : \c" read filename echo "Enter BKS Password : \c&qu ...

  3. generate eml file

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...

  4. Generate input file for OVITO

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  5. Mac Terminal open app with a file opened

    open -a /Applications/Sublime Text.app test.cpp

  6. Mac OS build caffe2 Error:This file was generated by an older version of protoc which is

    问题所在 我们可以发现这个错误跟protobuf的版本有关,因此我们可以执行script/diagnose_protobuf.py 我们可以看到,pip install protobuf 和 brew ...

  7. Windows平台CUDA开发之前的准备工作

    CUDA是NVIDIA的GPU开发工具,眼下在大规模并行计算领域有着广泛应用. windows平台上面的CUDA开发之前.最好去NVIDIA官网查看说明,然后下载对应的driver. ToolKits ...

  8. How to generate a new dictionary file of mmseg

    How to generate a new dictionary file of mmseg 0.Usage about mmseg-node memtioned in github : var mm ...

  9. IAR EWARM Checksum Technical Note

    IELFTOOL Checksum - Basic actions EW targets: ARM, RH850, RX, SH, STM8 EW component: General issues ...

随机推荐

  1. MongoDB(课时18 修改器)

    3.4.3.2 修改器(原子操作) 对MongoDB数据库而言,数据的修改会牵扯到内容的变更,结构的变更(包含数组),所以在MongoDB在设计的时候就提供有一系列的修改器的应用,那么像之前使用的“$ ...

  2. Codeforces 918C - The Monster

    918C - The Monster 思路1: 右键在新窗口打开图片 代码: #include<bits/stdc++.h> using namespace std; #define ll ...

  3. 记录Vmware Workstation及Centos6.8 的安装

    网上找到的一个非常详细的安装详解.个人觉得非常好.于是加保存一下.地址:http://www.mamicode.com/info-detail-1462939.html

  4. Java 常用对象-Math类

    2017-11-02 21:26:18 Math类:Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数. *属性摘要 *常用方法 random() : 返回[0.0,1.0 ...

  5. 『cs231n』视频数据处理

    视频信息 和我之前的臆想不同,视频数据不仅仅是一帧一帧的图片本身,还包含个帧之间的联系,也就是还有一个时序的信息维度,包含人的动作判断之类的任务都是要依赖动作的时序信息的 视频数据处理的两种基本方法 ...

  6. HDU-4850 Wow! Such String! (构造)

    Problem Description Recently, doge starts to get interested in a strange problem: whether there exis ...

  7. 牛客网——B-栈和排序

    链接:https://www.nowcoder.com/acm/contest/58/B来源:牛客网 题目描述 给你一个1->n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数组 ...

  8. dp练习(5)——最长严格上升子序列

    1576 最长严格上升子序列  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 给一个数组a1, a2 ... ...

  9. OAF 动态创建组件以及动态绑定属性

    在开发中,我们遇到以下一个需求. 一个表格左侧有5列是固定存在的,右侧有N列是动态生成的,并且该N列中第一列可输入,第二列是不可编辑的,但是是数字,如果小于0,那么就要显示为红色,重点标识出来. 首先 ...

  10. POJ 1754 线段树

    e,应该是线段树里的水题.线段树单点更新.查询区间最值. 代码套用模板 PS :模板有些地方不太懂. #include<stdio.h>#include<iostream>#i ...