怎样生成全是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='