草庐IT

aeabi_memcpy

全部标签

c++ - unsigned char 数组到 unsigned int 通过 memcpy 返回到 unsigned char 数组被反转

这不是跨平台代码...所有内容都在同一平台上执行(即字节序是相同的......小字节序)。我有这个代码:unsignedchararray[4]={'t','e','s','t'};unsignedintout=((array[0]unsignedcharbuff[4];memcpy(buff,&out,sizeof(unsignedint));std::cout我希望buff的输出是“test”(由于缺少“/0”而带有垃圾尾随字符),但输出却是“tset”。显然,更改我要移动的字符的顺序(3、2、1、0而不是0、1、2、3)可以解决问题,但我不明白这个问题。memcpy是否没有按我预

c++ - 为什么memcpy复制Eigen矩阵数据失败,std::copy成功?

当我使用Eigen创建矩阵时,如下所示:Eigen::MatrixXdM(3,3);M产生147258369我可以用指针遍历数据,打印每个元素:double*d=M.data();for(inti=0;i产生123456789我还可以使用std::copy将其复制到堆栈上相同类型的数组,然后打印该数组的元素:doubledata_copy[9];std::copy(M.data(),M.data()+M.size(),data_copy);for(inti=0;i产生123456789但是,我似乎无法使用memcpy进行等效复制。这只能复制第一个元素:doubledata_memcop

c++ - C++ 中的 memcpy 等价物是什么

在C++中将memcpy用于缓冲区或字符串有什么等价物?例如:charmessage_buffer[32];uint16_tn=457u;memcpy(message_buffer,&n,sizeof(n));...类似于:std::stringmessage_buffer;uint16_tn=457u;std::copy(messagebuffer,n);没有C++等价物吗?我是否只是坚持使用memcpy,而不是使用std::string?std::stringmessage_buffer;message_buffer.resize(32);uint16_tn=457u;memcpy

c++ - 使用数组和某些方法来 memcpy struct 是否安全?

我想知道在包含数组和方法的结构上使用memcpy是否安全(只是一些getter和setter,因为数组的索引是不寻常的,我必须以某种方式映射它)。我知道它对POD是安全的,但我不确定我的结构是否会被视为POD? 最佳答案 您可以使用memcpy如果struct是TriviallyCopyable.您可以检查您的struct可以通过使用std::is_trivially_copyable轻松复制.此外,正如@JohanLundberg在评论中指出的那样,目标地址必须是0模std::alignment_of.您可以在http://en.

c++ - memcpy() 相邻内存区域的安全性

我最近在usingvolatile上问了一个问题并被引导阅读一些非常来自Intel和其他讨论内存屏障及其用途的信息性文章。读完这些文章后,我变得相当偏执。我有一台64位机器。从多个线程memcpy到相邻的、非重叠的内存区域是否安全?例如,假设我有一个缓冲区:charbuff[10];一个线程memcpy到前5个字节而第二个线程复制到最后5个字节是否总是安全?我的直觉react(和一些简单的测试)表明这是完全安全的,但我无法在任何地方找到可以完全说服我的文档。 最佳答案 安全,是的。性能,至少在这个有限的例子中没有。请记住,一个缓存行

c++ - 使用 memcpy 时出现内存错误?

我正在使用dcmtk库修改多帧压缩dicom图像的像素数据。因此,要做到这一点,在for循环的一个阶段,我获取每个解压缩帧的像素数据并根据我的意愿修改它们,并尝试将每个修改后的像素数据连接到一个大内存缓冲区帧中框架。for循环的核心过程如下。问题是在第一次迭代之后,它在我调用函数getUncompressedFrame的代码行提供了内存。我认为这是因为memcpy(fullBuffer+(i*sizeF),newBuffer,sizeF);行而发生的,因为当我删除该行时,当时没有错误,整个for循环工作得很好.如果我在使用memcpy时犯了错误,你能告诉我吗?谢谢。Uint32size

c++ - memcpy() 函数是可重入的吗?

我在信号处理程序中调用了一些C++函数,但我的程序因段错误而终止。当我检查gdb时,memcpy()函数是我获得SIGSEGV的地方。我想知道memcpy()是否是可重入函数? 最佳答案 在除了最高度嵌入的平台之外的所有平台中,它都是可重入的。你提到SIGSEGV所以我认为它不是其中之一。在这种情况下,很可能memcpy()不是罪魁祸首:这是调用者的错。如果您要求memcpy()复制错误的指针(或错误的长度),那么它就会出错。你可以很容易地做到这一点:memcpy(NULL,NULL,123456789);这会导致SIGSEGV,它

c++ - 为什么 memcpy/memmove 在将 int 复制到字节缓冲区时反转数据?

所以,我的问题很简单:我需要用一些信息填充一个char/unsignedchar数组。中间的一些值取自short/int类型,这就是发生的情况:代码:intfoo=15;//0x0000000Funsignedcharbuffer[100]={0};..memcpy(&buffer[offset],&foo,sizeof(int));//eithermemmove...输出:...0F000000..所以现在我写了一个函数来反转这些字段,但我认为这不是一个明智的解决方案,因为它会影响执行时间、资源和开发时间。有更简单的方法吗?编辑:正如你们中的许多人所指出的,这种行为是由小端处理器产生

c++ - Memcpy、字符串和终止符

我必须编写一个函数,用字符串的内容填充指定长度的char*缓冲区。如果绳子太长,我只需要剪掉它。缓冲区不是由我分配的,而是由我的函数的用户分配的。我试过这样的事情:intwritebuff(char*buffer,intlength){stringtext="123456789012345";memcpy(buffer,text.c_str(),length);//buffer[length]='\0';return1;}intmain(){char*buffer=newchar[10];writebuff(buffer,10);cout我的问题是关于终结符:它应该存在还是不存在?这个

c++ - 我可以使用 memcpy(*this) 修改构造函数中的所有类成员吗?

structSomething{inta;intb;Something(char*buffer){memcpy(this,buffer,sizeof(Something));};};这合法吗?安全的?对我来说它看起来不错,但我不确定C++标准是否以某种方式禁止它。 最佳答案 ...fromthefactthatit'snolongeraPODtypeafterIaddedtheconstructor.这不是事实(只是假新闻;-))。添加构造函数不会更改struct的POD类型状态。您还可以使用static_assert轻松检查:st