将memcpy与十六进制值一起使用

将memcpy与十六进制值一起使用,c,memcpy,C,Memcpy,我能行 memcpy(buffer, "\0", 1); 但我做不到 memcpy(buffer, 0x0, 1); 它会导致分割错误 有没有一种方法可以将十六进制值与memcpy一起使用,而不使用它们的字符串表示形式?memcpy接受两个指针“\0”是指向字符串的指针0x0被解释为指针为NULL,在大多数平台上读取和写入该指针是非法的 重写第二个示例的正确方法是使用指针: int x = 0x0; memcpy(buffer, &x, 1); 这些是非常不同的事情 第一 memc

我能行

memcpy(buffer, "\0", 1);
但我做不到

memcpy(buffer, 0x0, 1);
它会导致分割错误


有没有一种方法可以将十六进制值与memcpy一起使用,而不使用它们的字符串表示形式?

memcpy
接受两个指针<代码>“\0”是指向字符串的指针
0x0
被解释为指针为
NULL
,在大多数平台上读取和写入该指针是非法的

重写第二个示例的正确方法是使用指针:

int x = 0x0;
memcpy(buffer, &x, 1);

这些是非常不同的事情

第一

memcpy(buffer, "\0", 1);
将文本字符串
“\0”
的1个字符复制到
缓冲区中

第二

memcpy(buffer, 0x0, 1);
尝试从
0
复制一个字节。这和

memcpy(buffer, NULL, 1);

你的外在问题是什么?你想完成什么?对于这个(可能是简化的)问题,一个非常具体的答案很可能不会帮助你解决真正的问题。(或者你总是要处理一个字节吗?如果不止一个字节,那么如何处理就很重要,因为值必须以某种方式进行编码才能存储在内存中,而且通常有不止一个选项来实现这一点。)我想你需要
memset
,not
memcpy
第一个是指向以NULL结尾的字符串缓冲区的
char*
指针,第二个是NULL指针。当然它会爆炸。字符串在内存中有一种正确的表示方式。但用十六进制表示的数值也可以以多种不同的方式存储在内存中。您如何编写代码来在内存中存储这样的值取决于您希望如何表达该值。例如,
0x7214
可以先用
0x72
0x14
存储在内存中。或者,如果它表示已签名的数量,则可能需要进行符号扩展。我们需要更多的信息为您提供如何在内存中正确编码数据的有用建议。
memcpy
将数据从一个缓冲区复制到另一个缓冲区
memset
将使用给定值设置缓冲区中的一系列字节。在要复制的第二个参数中,您似乎不打算向源缓冲区发送地址,这使我相信
memcpy
不是您想要使用的。重点不是0x0值,而是一般的十六进制。这是相同的问题。您必须给
memcpy
两个指向有效内存位置的指针。如果你只是给它一个“随机”数,不管它是十进制还是十六进制,它可能不会指向分配给你的程序的内存。我想要的是一种将十六进制值转换成可以传递给memcpy的格式的方法。@MikkoP。我在回答中提到了这一点,你为什么要这样做?对我来说,这听起来像是一个笑话。谢谢!你答案中经过编辑的部分正是我想要的。