c代碼生成器源碼
按照我的理解,可以的,代碼生成器是跨平台,而且是跨語言的(至少是跨文本語言的,UML暫時不好說,)。
代碼生成器作為一種開發工具,一般不直接作為程序的一部分,通常也不直接或間接(如通過AOP)被程序調用,他是通過編程的方式生成所需要的代碼,然後將生成的代碼作為源文件,復制到開發工具的代碼區,然後進行編譯。由於代碼生成器是在編譯之前運行的,因此它可以跨語言,你不但可以用代碼生成器生成高級語言,也可以生成匯編語言,甚至機器碼(0、1代碼)。
但編寫代碼生成器是一個難點,它需要你了解目標編程語言的語法。如果別人已經把你需要的代碼生成器寫好了,你只需按要求使用即可,此時就不需要了解目標編程語言的語法。
JNI是通過Java調用C語言(或其他語言,一般是C),它的實現機制與代碼生成器不同(JNI是通過代碼調用實現功能,而代碼生成器是生成代碼,復制代碼進行使用),由於C是底層語言,一些底層操作單靠Java無法實現,所以才需要JNI。
以上是我對代碼生成器的個人理解,雖然提問時間已過了很久,但依然希望能對你及其他網友有所幫助。
② 跪求C語言的隨機數生成器的頭文件代碼
這題不是讓自己根據給出的演算法實現么?
給你兩篇參考文獻吧:
C語言產生隨機數:
http://blog.csdn.net/ammana_babi/article/details/1437498
rand ( ) 和 srand ( )【C語言庫函數源代碼】:
http://blog.csdn.net/ammana_babi/article/details/1437498
③ 一維條碼生成器c#源代碼,要VS2010版本的!
郵件就不發了,你拉一個form,加一個textbox和一個按鈕。
代碼如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing;
using System.Collections;
namespace BarcodeTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string fix_value = "";
byte[] fix_image01 = new byte[1024];
fix_value = this.textBox1.Text;
Code39 _code39 = new Code39();
_code39.Height = 120;
_code39.Magnify = 1;
_code39.ViewFont = new Font("宋體", 20);
System.Drawing.Image[] _image = new System.Drawing.Image[1];
System.IO.MemoryStream _stream = new System.IO.MemoryStream();
FileStream[] fs = new FileStream[1];
string jpg = "";
jpg = "d:\\" + fix_value.ToString() + ".jpeg";
_image[0] = _code39.GetCodeImage(fix_value, Code39.Code39Model.Code39Normal, true);
_image[0].Save(_stream, System.Drawing.Imaging.ImageFormat.Jpeg);
_image[0].Save(jpg);
}
}
public class Code39
{
private Hashtable m_Code39 = new Hashtable();
private byte m_Magnify = 0;
public byte Magnify { get { return m_Magnify; } set { m_Magnify = value; } }
private int m_Height = 40;
public int Height { get { return m_Height; } set { m_Height = value; } }
private Font m_ViewFont = null;
public Font ViewFont { get { return m_ViewFont; } set { m_ViewFont = value; } }
public Code39()
{
m_Code39.Add("A", "1101010010110");
m_Code39.Add("B", "1011010010110");
m_Code39.Add("C", "1101101001010");
m_Code39.Add("D", "1010110010110");
m_Code39.Add("E", "1101011001010");
m_Code39.Add("F", "1011011001010");
m_Code39.Add("G", "1010100110110");
m_Code39.Add("H", "1101010011010");
m_Code39.Add("I", "1011010011010");
m_Code39.Add("J", "1010110011010");
m_Code39.Add("K", "1101010100110");
m_Code39.Add("L", "1011010100110");
m_Code39.Add("M", "1101101010010");
m_Code39.Add("N", "1010110100110");
m_Code39.Add("O", "1101011010010");
m_Code39.Add("P", "1011011010010");
m_Code39.Add("Q", "1010101100110");
m_Code39.Add("R", "1101010110010");
m_Code39.Add("S", "1011010110010");
m_Code39.Add("T", "1010110110010");
m_Code39.Add("U", "1100101010110");
m_Code39.Add("V", "1001101010110");
m_Code39.Add("W", "1100110101010");
m_Code39.Add("X", "1001011010110");
m_Code39.Add("Y", "1100101101010");
m_Code39.Add("Z", "1001101101010");
m_Code39.Add("0", "1010011011010");
m_Code39.Add("1", "1101001010110");
m_Code39.Add("2", "1011001010110");
m_Code39.Add("3", "1101100101010");
m_Code39.Add("4", "1010011010110");
m_Code39.Add("5", "1101001101010");
m_Code39.Add("6", "1011001101010");
m_Code39.Add("7", "1010010110110");
m_Code39.Add("8", "1101001011010");
m_Code39.Add("9", "1011001011010");
m_Code39.Add("+", "1001010010010");
m_Code39.Add("-", "1001010110110");
m_Code39.Add("*", "1001011011010");
m_Code39.Add("/", "1001001010010");
m_Code39.Add("%", "1010010010010");
m_Code39.Add("$", "1001001001010");
m_Code39.Add(".", "1100101011010");
m_Code39.Add(" ", "1001101011010");
}
public enum Code39Model
{
Code39Normal,
Code39FullAscII
}
public Bitmap GetCodeImage(string p_Text, Code39Model p_Model, bool p_StarChar)
{
string _ValueText = "";
string _CodeText = "";
char[] _ValueChar = null;
switch (p_Model)
{
case Code39Model.Code39Normal:
_ValueText = p_Text.ToUpper();
break;
default:
_ValueChar = p_Text.ToCharArray();
for (int i = 0; i != _ValueChar.Length; i++)
{
if ((int)_ValueChar[i] >= 97 && (int)_ValueChar[i] <= 122)
{
_ValueText += "+" + _ValueChar[i].ToString().ToUpper();
}
else
{
_ValueText += _ValueChar[i].ToString();
}
}
break;
}
_ValueChar = _ValueText.ToCharArray();
if (p_StarChar == true) _CodeText += m_Code39["*"];
for (int i = 0; i != _ValueChar.Length; i++)
{
if (p_StarChar == true && _ValueChar[i] == '*') throw new Exception("帶有起始符號不能出現*");
object _CharCode = m_Code39[_ValueChar[i].ToString()];
if (_CharCode == null) throw new Exception("不可用的字元" + _ValueChar[i].ToString());
_CodeText += _CharCode.ToString();
}
if (p_StarChar == true) _CodeText += m_Code39["*"];
Bitmap _CodeBmp = GetImage(_CodeText);
GetViewImage(_CodeBmp, p_Text);
return _CodeBmp;
}
private Bitmap GetImage(string p_Text)
{
char[] _Value = p_Text.ToCharArray();
Bitmap _CodeImage = new Bitmap(_Value.Length * ((int)m_Magnify + 1), (int)m_Height);
Graphics _Garphics = Graphics.FromImage(_CodeImage);
_Garphics.FillRectangle(Brushes.White, new Rectangle(0, 0, _CodeImage.Width, _CodeImage.Height));
int _LenEx = 0;
for (int i = 0; i != _Value.Length; i++)
{
int _DrawWidth = m_Magnify + 1;
if (_Value[i] == '1')
{
_Garphics.FillRectangle(Brushes.Black, new Rectangle(_LenEx, 0, _DrawWidth, m_Height));
}
else
{
_Garphics.FillRectangle(Brushes.White, new Rectangle(_LenEx, 0, _DrawWidth, m_Height));
}
_LenEx += _DrawWidth;
}
_Garphics.Dispose();
return _CodeImage;
}
private void GetViewImage(Bitmap p_CodeImage, string p_Text)
{
if (m_ViewFont == null) return;
Graphics _Graphics = Graphics.FromImage(p_CodeImage);
SizeF _FontSize = _Graphics.MeasureString(p_Text, m_ViewFont);
if (_FontSize.Width > p_CodeImage.Width || _FontSize.Height > p_CodeImage.Height - 20)
{
_Graphics.Dispose();
return;
}
int _StarHeight = p_CodeImage.Height - (int)_FontSize.Height;
_Graphics.FillRectangle(Brushes.White, new Rectangle(0, _StarHeight, p_CodeImage.Width, (int)_FontSize.Height));
int _StarWidth = (p_CodeImage.Width - (int)_FontSize.Width) / 2;
_Graphics.DrawString(p_Text, m_ViewFont, Brushes.Black, _StarWidth, _StarHeight);
_Graphics.Dispose();
}
}
}
④ C語言源程序文件經過編譯連接之後生成一個後綴為_____的文件。
如果只生成一個文件,那麼這個題目答案是B。編譯(compile)後生成目標文件,後綴:.obj。也就是機器碼。
然後鏈接器(Linker) 連接生成可執行文件,後綴:.exe。最後運行命令(go),直接運行.exe文件。
(4)c代碼生成器源碼擴展閱讀:
簡單講,編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。
一個現代編譯器的主要工作流程:源代碼(source code) →預處理器(preprocessor) →編譯器(compiler) →目標代碼(object code) →鏈接器(Linker) → 可執行程序(executables)
高級計算機語言便於人編寫,閱讀交流,維護。機器語言是計算機能直接解讀、運行的。
編譯器將匯編或高級計算機語言源程序(Source program)作為輸入,翻譯成目標語言(Target language)機器代碼的等價程序。
源代碼一般為高級語言 (High-level language), 如Pascal、C、C++、Java、漢語編程等或匯編語言。
而目標則是機器語言的目標代碼(Object code),有時也稱作機器代碼(Machine code)。
對於C#、VB等高級語言而言,此時編譯器完成的功能是把源碼(SourceCode)編譯成通用中間語言(MSIL/CIL)的位元組碼(ByteCode)。
最後運行的時候通過通用語言運行庫的轉換,編程最終可以被CPU直接計算的機器碼(NativeCode)。
⑤ C語言隨機數生成器代碼解析
在C語言中,欲求正整數a到b(a < b)間的數的語句是:
rand()%(b - a) + a;
假如a = 50,b = 100,則
rand()%50 + 50;
因為 0 ≤ rand()%50 ≤ 49,所以rand()%50 + 50 的范圍是: 50 ~ 99
⑥ 【急】求C語言程序代碼!!!【交叉引用生成器】
#include<stdio.h>
#include<string.h>
int isword(char a[])
{
int i;
for(i=0;i<=strlen(a)-1;i++)
{
if(!(((a[i]>='a')&&(a[i]<='z'))||((a[i]>='A')&&(a[i]<='Z'))||((a[i]=='-')&&(i!=0))))
return 0;
}
return 1;
}
struct cross {
char dc[100];
int hs[1000];
};
main()
{
FILE *in,*out;
int i,j=0,hshs=1,k,bz=1,count,dcs=0,bbzz=0;
char temp[100]={0},khh;
struct cross a[200]={0},ls;
in=fopen("crossin.txt","r");
out=fopen("crossout.txt","w");
while((khh=fgetc(in))!=EOF)
{
if(khh=='\n')
{
hshs++;
continue;
}
else if(khh==' ')
continue;
else
{
ungetc(khh,in);
}
fscanf(in,"%s",temp);
bz=1;
for(i=0;(temp[i]!='\0')&&((temp[i]!='.')&&(temp[i]!=',')&&(temp[i]!='!')&&(temp[i]!='?')&&(temp[i]!=':')&&(temp[i]!=';'));i++);
temp[i]='\0';
for(i=0;i<200;i++)
{
if(strcmp(temp,a[i].dc)==0)
{
for(k=0;a[i].hs[k]!=0;k++);
a[i].hs[k]=hshs;
bz=0;
}
}
if(bz)
{
strcpy(a[j].dc,temp);
a[j++].hs[0]=hshs;
}
}
for(dcs=0;a[dcs].dc[0]!='\0';dcs++);
while(1)
{
count=0;
for(i=0;i<dcs-1;i++)
{
if(strcmp(a[i].dc,a[i+1].dc)>0)
{
ls=a[i];
a[i]=a[i+1];
a[i+1]=ls;
count++;
}
}
if(count==0)
break;
}
for(i=0;i<dcs;i++)
{
if((isword(a[i].dc))&&(strcmp(a[i].dc,"a")!=0)&&(strcmp(a[i].dc,"an")!=0)&&(strcmp(a[i].dc,"the")!=0)&&(strcmp(a[i].dc,"and")!=0))
{
fprintf(out,"%s:",a[i].dc);
for(j=0;a[i].hs[j]!=0;j++)
{
if(a[i].hs[j]!=a[i].hs[j+1])
{
if(bbzz)
fprintf(out,",");
fprintf(out,"%d",a[i].hs[j]);
bbzz=1;
}
}
fprintf(out,"\n");
}
bbzz=0;
}
fputc(' ',out);
fclose(in);
fclose(out);
}
你是北航的么- -
⑦ 如何用C語言 寫一個隨機數生成器的程序
#include <stdio.h>
#include <time.h>
void main()
{
int iNum = 0;
srand((unsigned)time(0));
iNum = rand() % 100 + 1; //隨機生成一個數,並對100取余,使它小於100(0~99)。再加1(1~100)
printf("%d\n", iNum); \\列印出來這個數
return;
}
如果想多生成幾個隨機數,可以有一個數組存儲,並用for循環實現隨機生成
int aiNum[10] = {0};
int iLoop = 0;
//隨機生成10個數
for ( iLoop = 0; iLoop < 10; iLoop++ )
{
aiNum[iLoop] = rand() % 100 + 1;
}
⑧ 求幾個比較有趣,簡單的C語言源代碼 小白自己敲著練一下手感
最簡單的模擬計時器:
#include<stdio.h>
#include<conio.h>
#include<windows.h>
int m=0,s=0,ms=0; //m是分 s是秒 ms是毫秒
//以下是5個自編函數
void csh( ); //初始化界面
void yinc(int x,int y); //隱藏游標的函數(y值設為0就會隱藏)
void jishi( ); //計時器運行(每100毫秒變化一次)
void Color (short x, short y); //設定顏色的函數(y設為0就是黑底)
void gtxy (int x, int y); //控制游標位置的函數
int main( ) //主函數
{ csh( );
getch( );
while(1)
{ jishi( );
Sleep(100); //間隔100毫秒
if( kbhit( ) )break; //有鍵按下就退出循環
}
return 0;
}
void csh( ) //初始化界面
{Color(14,0); //設定淡黃字配黑底
printf(「 計時器」);
Color(10,0); //設定淡綠字配黑底
printf(" ┌───────────┐");
printf(" │ │");
printf(" └───────────┘");
gtxy(10,4); //游標到屏幕第10列4行處輸出
Color(7,0); //恢復白字黑底
printf(" 00:00:00 ");
yinc(1,0 ); //隱藏游標(yinc代表隱藏)
return;
}
void jishi( ) //計時器運行
{ms+=1;
if(ms==10){s+=1;ms=0;}
if(s==60){m+=1;s=0;}
gtxy(10,4);
Color(9,0); //設定淡藍字配黑底
if(m>9) printf(" %d:",m);
else printf(" 0%d:",m);
Color(14,0); //設定淡黃字配黑底
if(s>9) printf("%d:",s);
else printf("0%d:",s);
Color(12,0); //設定淡紅字配黑底
printf("0%d",ms);
}
void gtxy (int x, int y) //控制游標位置的函數
{ COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition ( GetStdHandle (STD_OUTPUT_HANDLE), pos );
}
void Color (short ForeColor= 7, short BackGroundColor= 0) //設定顏色的函數
{ HANDLE handle = GetStdHandle ( STD_OUTPUT_HANDLE );
SetConsoleTextAttribute ( handle, ForeColor + BackGroundColor * 0x10 );
}
void yinc(int x,int y) //隱藏游標的設置(gb代表游標)
{ CONSOLE_CURSOR_INFO gb={x,y}; //x為1-100,y為0就隱藏游標
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &gb);
}
⑨ 如何用C語言編一個密碼生成器
C語言實現密碼生成器,參考代碼如下:
#include
#include
#include
//constcharlower_chars[]="abcdefghijklmnopqrstuvwxyz";
//constcharupper_chars[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//constcharnumber_chars[]="0123456789";
constcharlower_chars[]="abcdefghijkmnpqrstuvwxyz";//noloro
constcharupper_chars[]="ABCDEFGHJKLMNPQRSTUVWXYZ";//noIorO
constcharnumber_chars[]="23456789";//no1or0
constcharspecial_chars[]="!@#$%^&*()-=_+[]{};:'"<>,.?/";
constint_ks_pass_len=17;
voidmkpass(charpass[_ks_pass_len+1])
{
inti=0,j=0,k=0,n=0;
n=_ks_pass_len/4;
for(;i<n;i++)
{
pass[i]=lower_chars[rand()%(strlen(lower_chars))];
pass[i+n]=upper_chars[rand()%(strlen(upper_chars))];
pass[i+2*n]=number_chars[rand()%(strlen(number_chars))];
pass[i+3*n]=special_chars[rand()%(strlen(special_chars))];
}
j=_ks_pass_len-4*n;
for(i=0;i<j;i++){
pass[i+4*n]=special_chars[rand()%(strlen(special_chars))];
}
//字元亂序
for(i=0;i<32;i++)
{
j=rand()%(_ks_pass_len);
k=pass[j];
pass[j]=pass[i%_ks_pass_len];
pass[i%_ks_pass_len]=k;
}
pass[_ks_pass_len]='