如何在C中使用字符串?

如何在C中使用字符串?,c,string,C,String,我正在努力学习如何编写现代程序。我想以字符串形式存储二进制数据,然后输出它。为什么?例如,我想将整个文件读取为字符串,然后将其输出到stdout 我怎么做?Printf并将停止输出数据放在第一个\0 我应该用什么来存储文件名,以便使用国际字符?wchar\u t?假设您有一个二进制文件。假设您要从 文件 如您所见,有些字节没有表示形式,如果我要打印 作为字符串,结果如下: 这没什么帮助,在这里我很幸运,至少有可打印的 整数 如果您还想打印可打印字符(如十六进制编辑器) do): 假设您有一个二

我正在努力学习如何编写现代程序。我想以字符串形式存储二进制数据,然后输出它。为什么?例如,我想将整个文件读取为字符串,然后将其输出到stdout

我怎么做?Printf并将停止输出数据放在第一个\0


我应该用什么来存储文件名,以便使用国际字符?wchar\u t?

假设您有一个二进制文件。假设您要从 文件

如您所见,有些字节没有表示形式,如果我要打印 作为字符串,结果如下:

这没什么帮助,在这里我很幸运,至少有可打印的 整数

如果您还想打印可打印字符(如十六进制编辑器) do):


假设您有一个二进制文件。假设您要从 文件

如您所见,有些字节没有表示形式,如果我要打印 作为字符串,结果如下:

这没什么帮助,在这里我很幸运,至少有可打印的 整数

如果您还想打印可打印字符(如十六进制编辑器) do):

我想以字符串形式存储二进制数据,然后输出它

一旦将二进制数据存储在存储器中(在本例中,它是
char-bin[]
) 您可以使用
sprintf
将其转换为字符ascii字符串:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){

    int i;  
    char bin[] = { 0, 1 , '1', '2', '3' , 0 , 7 }; 
    char str[256]; 
    char *buf2 = str;

    size_t size =  sizeof(bin)*2;

    for(i= 0; i < size; i++  )
    {
        buf2 += sprintf(buf2, "%02X", bin[i]);
    }

    str[i] = 0; // terminate your string

    printf("STRING: %s", str);

    return 0;
}
我想以字符串形式存储二进制数据,然后输出它

一旦将二进制数据存储在存储器中(在本例中,它是
char-bin[]
) 您可以使用
sprintf
将其转换为字符ascii字符串:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){

    int i;  
    char bin[] = { 0, 1 , '1', '2', '3' , 0 , 7 }; 
    char str[256]; 
    char *buf2 = str;

    size_t size =  sizeof(bin)*2;

    for(i= 0; i < size; i++  )
    {
        buf2 += sprintf(buf2, "%02X", bin[i]);
    }

    str[i] = 0; // terminate your string

    printf("STRING: %s", str);

    return 0;
}

您不应该将二进制数据存储为字符串,因为存在诸如\0是终止字符串之类的问题。将字节存储在
uint8\t
数组或
无符号字符
数组中,但不要将其视为字符串。此外,当您读取二进制文件时,许多字节是不可打印的,如果您打印它们,您将在屏幕上看到“垃圾”。最好打印字节的十六进制表示形式。不可以:
printf(“%s”,str_len,str_ptr)
如果您坚持将gobbledygook打印到您的终端,(1)它实际上不是一个字符串,但(2)您可以使用
fwrite
将任意数据写入标准输出,只要您记得您有多少数据(因为它不是一个字符串…没有
ArbiryDataLen
函数,而且不可能有).在处理二进制流时,最好以十六进制格式打印它们,您可以使用
printf
来实现:
printf(“%02x\n”,val)“如何在C中使用字符串?”。。这不是在C中使用字符串的方式。字符串是以
NUL
结尾的可打印字符的字符数组,二进制数据根本不需要符合该格式。您不应该将二进制数据存储为字符串,因为\0是终止字符串等问题。将字节存储在
uint8\t
数组或
无符号字符
数组中,但不要将其视为字符串。此外,当您读取二进制文件时,许多字节是不可打印的,如果您打印它们,您将在屏幕上看到“垃圾”。最好打印字节的十六进制表示形式。不可以:
printf(“%s”,str_len,str_ptr)
如果您坚持将gobbledygook打印到您的终端,(1)它实际上不是一个字符串,但(2)您可以使用
fwrite
将任意数据写入标准输出,只要您记得您有多少数据(因为它不是一个字符串…没有
ArbiryDataLen
函数,而且不可能有).在处理二进制流时,最好以十六进制格式打印它们,您可以使用
printf
来实现:
printf(“%02x\n”,val)“如何在C中使用字符串?”。。这不是在C中使用字符串的方式。字符串是以
NUL
结尾的可打印字符的字符数组,二进制数据根本不需要符合该格式。非常好。除了
fread(bytes,sizeof bytes/sizeof*bytes,1,fp)!=1
可能更好,因为
fread(bytes,sizeof bytes,1,fp)!=1
@chux,我想只做
sizeof bytes
,因为
sizeof*bytes
无论如何都是1,但我想有一种正确的方法来获得数组的元素数,而不管它是什么类型。如果您认为只有
sizeof bytes
,答案会更清楚,请告诉我,以便我可以更新答案。@Pablo谢谢。第一个例子就是我想要的。我需要将二进制文件发送到stdout,以便其他程序可以从stdin读取这些二进制数据。非常好。除了
fread(bytes,sizeof bytes/sizeof*bytes,1,fp)!=1
可能更好,因为
fread(bytes,sizeof bytes,1,fp)!=1
@chux,我想只做
sizeof bytes
,因为
sizeof*bytes
无论如何都是1,但我想有一种正确的方法来获得数组的元素数,而不管它是什么类型。如果您认为只有
sizeof bytes
,答案会更清楚,请告诉我,以便我可以更新答案。@Pablo谢谢。第一个例子就是我想要的。我需要将二进制文件发送到stdout,以便其他程序可以从stdin读取这些二进制数据。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){

    int i;  
    char bin[] = { 0, 1 , '1', '2', '3' , 0 , 7 }; 
    char str[256]; 
    char *buf2 = str;

    size_t size =  sizeof(bin)*2;

    for(i= 0; i < size; i++  )
    {
        buf2 += sprintf(buf2, "%02X", bin[i]);
    }

    str[i] = 0; // terminate your string

    printf("STRING: %s", str);

    return 0;
}
STRING: 00013132330007