如何将txt里的2进制数据转成16进制,再输出为txt文档

如何将txt里的2进制数据转成16进制,再输出为txt文档,第1张

原型:
int WINAPI icePub_binaryStringToHexString(char strBinary,char strHex)
输入:strBinary 2进制字符串
输出:strHex 16进制字符串结果
返回码:
VC sample代码:
extern "C"
{
__declspec(dllexport)
int WINAPI icePub_binaryStringToHexString(char strBinary,char strHex);
}
#pragma comment(lib,"icePubDlllib")
char strResult[1024];
icePub_binaryStringToHexString("1001110001101",strResult);
AfxMessageBox(strResult);
VB sample 代码:
Private Declare Function icePub_binaryStringToHexString Lib "icePubDlldll" (ByVal strBinary As String, ByVal strHex As String) As Integer
Dim strResult As String
Dim a2 As Integer
strResult = Space(1024)
a2=icePub_binaryStringToHexString("1001110001101",strResult)
MsgBox strResult

PC/Windows 默认就是小端序。
简单地按字节读写就可以了:
FILE fin,fout;
int i,n;
unsigned char c;
fin=fopen("atxt","rb");
fout=fopen("btxt","w");
for (i=0;i<16;i++){
fread(&c,1,1,fin);
fprintf(fout,"%02x",c);
}
fclose(fin);
fclose(fout);
===============
如果输入是4字节为单位的大端序,
unsigned char c[4]; 你一次读入4个字节,输出时,按反序输出为 c[3],c[2],c[1],c[0] 就可以了。

#include<stdioh>
#include<conioh>
#include<stdlibh>
#include<stringh>
char whichnum(char num);
int main()
{
int i=0;
int len,headlen;
char segment[5];
char hex,file_buf;
char result;
char result2;
int seg_num = 0;
FILE fp;
fp = fopen("atxt","r");
fseek(fp,0,SEEK_END);
len = ftell(fp);
rewind(fp);
file_buf = (char )malloc(len+1);
memset(file_buf,'\0',len+1);
fread(file_buf,len,1,fp);
headlen =len%4; //headlen 是最头的几个,如果不足4的话,做处理。
result = (char )malloc(len+1);
memset(result,'\0',len+1);
printf("文件中2进制的内容:%s\n",file_buf);
for(i=len-4;i>=0;i-=4)
{
strncpy(segment,file_buf+i,4);
segment[4] = '\0';
hex = whichnum(segment);
strncpy(result+seg_num,hex,1);
seg_num++;
}
if(headlen)
{
strcpy(segment,"0000");
strncpy(segment+4-headlen,file_buf,headlen);
segment[4] = '\0';
hex = whichnum(segment);
strncpy(result+seg_num,hex,1);
seg_num++;
}
len = strlen(result); //输出是反的,下面这几行把原来的又倒成正的了。
result2 = (char )malloc(len+1);
memset(result2,'\0',len+1);
for(i=1;i<len+1;i++)
{
strncpy(result2+i-1,result+len-i,1);
}
printf("转换成16进制的结果%s\n",result2);
free(result2);
free(file_buf);
free(result);
return 0;
}
char whichnum(char num) //判断把对应的二进制,转成十六进制。
{
char hex[16] ={"0000","0001","0010","0011","0100","0101","0110","0111", \
"1000","1001","1010","1011","1100","1101","1110","1111"};
char hex2[16] = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
int i;
for(i=0; i<16; i++)
{
if(strncmp(num,hex[i],4)==0)
return hex2[i];
}
return NULL;
}

给你写啦。

文件里没空格,回车之类的,只要是 纯2进制还好用。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13397778.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-28
下一篇 2023-07-28

发表评论

登录后才能评论

评论列表(0条)

保存