用C(不是ASCII)将十六进制写入文件

时间:2014-10-10 17:19:55

标签: c linux

我正在尝试将一些二进制字符串转换为十六进制值,并将其直接写入文件。我的意思是这些值只能通过十六进制编辑器显示,而且我不关心文件中的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”到文件,这不是我想要的。有没有人知道如何做到这一点或我的代码有什么问题?谢谢。

2 个答案:

答案 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;

}