我正在尝试将一些二进制字符串转换为十六进制值,并将其直接写入文件。我的意思是这些值只能通过十六进制编辑器显示,而且我不关心文件中的ASCII文本。
以下是我的代码的一部分:
unsigned int value;
char p[4];
FILE *fp;
fp = fopen("file.txt","wb+");
//sprintf(p, "\\x%x", hex);
value = strtol("10010011", NULL, 2);
fwrite(&value, strlen(p), 1, fp);
//fwrite(p, strlen(p), 1, fp);
我尝试使用fwrite将整数写入文件。它似乎工作,但它将写入4字节十六进制(填充00s)而不是1字节。我还试图打印一个以“\ x”开头的字符串并将字符串写入文件(注释掉这段代码),但是它将以ASCII格式写入,包括“\ x”到文件,这不是我想要的。有没有人知道如何做到这一点或我的代码有什么问题?谢谢。
答案 0 :(得分:2)
不要使用strlen
,因为它给出string
的长度,在这种情况下为8,因此写入8个字节。请改用sizeof(value)
。
此外,您使用的是int
数据类型,其大小可能因您的平台而异。如果您只想写字节,请使用unsigned char。所以你的代码是:
unsigned char value;
char p[4];
FILE *fp;
fp = fopen("file.txt","wb+");
value = strtol("10010011", NULL, 2);
fwrite(&value, sizeof(value), 1, fp);
//fwrite(p, strlen(p), 1, fp);
这会回答你的问题吗?
答案 1 :(得分:1)
关于我还尝试打印以“\ x”开头的字符串,并将字符串写入文件:
指示的部分允许您测试将十六进制值0x93(10010011)的字符串和二进制表示放入文本文件中:(取消注释要测试的部分)
int main(void)
{
unsigned int value;
char buf[10];
char p[4];
FILE *fp;
fp = fopen("file.txt","wb+");//"wb+" will allow either text or binary write (intended for binary)
value = strtol("10010011", NULL, 2);
/*writes binary value to file*/
//fwrite(&value, sizeof(value), 1, fp); //uncomment to test value to file
/*writes string representation to file*/
sprintf(buf, "\\x%x", value); //uncomment to test string to file
fputs(buf, fp); //
return 0;
}