怎樣生成全是1的二進制文件
㈠ 寫二進制文件
8 = 1b
2^10b = 1k
2^20b = 1m
2^30b = 1g
512m?
你要這么多的隨機0和1干什麼?
不明白!
摸不著頭腦的事我一般不思考!
我還是先想想怎麼讓vb脫離框架的問題吧!
摸著頭腦滴走開!
㈡ 如何生成一個二進制文件
文件在底層的寫法都是一樣的,就是寫char值,讀取區分的是文件類型(從PE獲取),也就是說在最底層寫文件方法都是一樣的,類似CStdio等都是封裝過的,你的意思估計是要自己寫PE的方法(類似生成EXE的方法),要自己處理PE頭、各段分區(非常復雜),一般都是找個exe自己來修改PE頭、段地址和data數據區
㈢ 如何創建一個大小為1G的空文件
創建內容為空的任意大小文件:
運行cmd打開命令行界面,然後切換到相應目錄,比如說,d:\temp_folder,那麼輸入D:回車,然後輸入cd temp_folder,當前路徑變成d:\temp_folder。
然後輸入fsutil file createnew testfile.txt 50000000,就會在當前文件夾創建一個名稱為testfile.txt的文件,大小為50000000個位元組,即47.6M大小。文件會瞬間生成,因為實際上Windows只是分配了名稱、地址和空間給該文件,並沒有讀寫任何文件內容,所以很快,跟刪除文件同理。
如果你要創建一個100M的文件,那麼文件大小應該是1024 X 1024 X 100,fsutil命令最後一段就用這個公式計算得的結果,如果是1G大小的文件,那麼就是1024 X 1024 X 1024 X 1。
㈣ 如何將一個文件轉換成二進制文件
文件都是以二進制存儲,根據擴展名不同選擇不同方式進行打開
㈤ (哈夫曼壓縮)將01字元串轉換為二進制文件的方法
//你沒說什麼語言!如果需要其它的話,我再翻譯一下!
//沒什麼效率,但是滿足需求了
importjava.io.*;
publicclassZ{
publicstaticvoidmain(String[]args)throwsException{
//System.out.println(decode(encode("00001000")));
//System.out.println(decode(encode("11111000")));
writeHuffman("011");
System.out.println(readHuffman());
}
//每次傳進去的字元串都是8個字元長度,剛好能夠表示一個byte
publicstaticbyteencode(Strings){
inta=0;
for(inti=0;i<8;i++){
charch=s.charAt(i);
a=a<<1;
if(ch=='1'){
a=a|0x1;
}
}
return(byte)a;
}
//上一步的逆操作
publicstaticStringdecode(byteb){
StringBuildersb=newStringBuilder();
for(inti=0;i<8;i++){
sb.append((b&(0x1<<(7-i)))>0?'1':'0');
}
returnsb.toString();
}
//再寫一下文件操作
//假設你已經得到了通過huffman樹編碼的字元串,那麼就這樣寫寫入文件
publicstaticvoidwriteHuffman(Strings)throwsException{
//因為huffman編碼字元串不總是8個字元的倍數,那麼我們不足8時補0,並記錄我們到底補了幾個。
//我們把補位數放在文件的第一個位元組
intz=8-s.length()%8;
if(z==8){
z=0;
}
byte[]buffer=newbyte[1024];
buffer[0]=(byte)z;
intpos=1,nBytes=(int)(Math.ceil(s.length()/((double)8)));
Filef=newFile("test.huffman");
FileOutputStreamos=newFileOutputStream(f);
for(inti=0;i<nBytes;i++){
Stringss;
if(s.length()>=(i+1)*8){
ss=s.substring(i*8,(i+1)*8);
}else{
ss=s.substring(i*8);
while(ss.length()<8){
ss=newStringBuilder(ss).append('0').toString();
}
}
buffer[pos]=encode(ss);
pos++;
if(pos==1024){
os.write(buffer);
pos=0;
}
}
if(pos>0){
os.write(buffer,0,pos);
}
os.close();
}
//我們把壓縮過的文本放在test.huffman裡面
publicstaticStringreadHuffman()throwsException{
Filef=newFile("test.huffman");
FileInputStreamfs=newFileInputStream(f);
byte[]buffer=newbyte[1024];
intlen=0;
StringBuildersb=newStringBuilder();
bytez=(byte)fs.read();
while((len=fs.read(buffer))!=-1){
for(inti=0;i<len;i++){
sb.append(decode(buffer[i]));
}
}
fs.close();
returnsb.substring(0,sb.length()-z);
}
}
c++ 版本
#include"stdafx.h"
#include<stdio.h>
#include<iostream>
#include<string>
#include<cmath>
usingnamespacestd;
unsignedcharencode(constchar*s){
inta=0;
for(inti=0;i<8;i++){
if(s[i]=='1'){
a=a|(0x1<<(7-i));
}
}
return(unsignedchar)a;
}
voiddecode(unsignedchara,char*buf){
for(inti=0;i<8;i++){
buf[i]=(((a>>(7-i))&0x1)!=0)?'1':'0';
}
}
voidwriteHuffman(conststring&s){
unsignedcharz=8-s.length()%8;
if(z==8){
z=0;
}
unsignedcharbuffer[1024];
buffer[0]=z;
intpos=1,nBytes=(int)(ceil(s.length()/((double)8)));
constchar*ps=s.c_str();
FILE*fp=fopen("test.huffman","wb");
charextended[8];
for(inti=0;i<nBytes;i++){
constchar*p;
if(s.length()>=(i+1)*8){
p=ps+i*8;
}
else{
char*pp=extended;
for(intj=i*8;j<s.length();j++){
*pp=s[j];
pp++;
}
for(intj=0;j<z;j++){
*pp='0';
pp++;
}
p=extended;
}
buffer[pos]=encode(p);
pos++;
if(pos==1024){
fwrite(buffer,sizeof(unsignedchar),1024,fp);
pos=0;
}
}
if(pos>0){
fwrite(buffer,sizeof(unsignedchar),pos,fp);
}
fclose(fp);
}
string&readHuffman(){
FILE*fp=fopen("test.huffman","rb");
fseek(fp,0L,SEEK_END);
size_tfileSize=ftell(fp);
rewind(fp);
unsignedcharbuffer[1024];
fread(buffer,sizeof(unsignedchar),1,fp);
unsignedcharz=buffer[0];
size_tstringSize=(fileSize-1)*8;
char*ptr=newchar[stringSize+1];
char*optr=ptr;
size_tlen;
while((len=fread(buffer,sizeof(unsignedchar),1024,fp))!=0){
for(inti=0;i<len;i++){
decode(buffer[i],ptr);
ptr=ptr+8;
}
}
fclose(fp);
ptr=ptr-z;
*ptr='