C:无符号字符*字节数组将元素复制到其他无符号字符*数组
我认为像这样复制数组的元素:C:无符号字符*字节数组将元素复制到其他无符号字符*数组,c,arrays,unsigned-char,C,Arrays,Unsigned Char,我认为像这样复制数组的元素: unsigned char *new_bytes_array = malloc(sizeof(unsigned char)*length/2); for(int i=0, j=0; i<length; i++) { if(i % 2 == 0) continue; new_bytes_array[j] = old_bytes_array[i]; j++; unsigned char*新字节数组=malloc(sizeof(unsigned
unsigned char *new_bytes_array = malloc(sizeof(unsigned char)*length/2);
for(int i=0, j=0; i<length; i++) {
if(i % 2 == 0) continue;
new_bytes_array[j] = old_bytes_array[i];
j++;
unsigned char*新字节数组=malloc(sizeof(unsigned char)*长度/2);
for(int i=0,j=0;i新字节数组[j]
计算为无符号字符
假设old\u bytes\u array[i]
也这样做,那么
new_bytes_array[j] = old_bytes_array[i];
复制一个无符号字符
,而不是指针,也不是无符号字符*
是的,您显示的赋值只分配一个无符号字符
,即“一个字节”。在大多数典型的计算机上,它不复制指针,而是复制原始数据
下面是一个完整的函数,它可以满足您的需要,并修复了一些小问题:
void * copy_every_second_byte(const void *src, size_t length)
{
if(src == NULL || length == 0)
return NULL;
unsigned char *out = malloc(length / 2);
for(size_t i = 0, j = 0; i < length; ++i)
{
if(i % 2 == 0) continue;
out[j++] = ((unsigned char *) src)[i];
}
return out;
}
void*每秒钟复制一个字节(const void*src,size\t length)
{
if(src==NULL | | length==0)
返回NULL;
无符号字符*out=malloc(长度/2);
对于(尺寸i=0,j=0;i <代码>你的代码做了一个“深度拷贝”。注意<代码> siZeof(unChar char)< /C>总是1,所以这只是一个恼人的方式写<代码> 1 <代码>(WHECH在乘法的情况下是相当没有意义的)。考虑删除它。@在不同的平台上解开,<代码> siZeof(unChar char)。
并不总是1。所以我认为删除它不是一个好主意。@litao3不。你错了,那根本不是真的。sizeof
的返回值是char
的单位,所以根据定义sizeof(char)
是1。@unwind yes,sizeof(char)在不同的体系结构上并不总是1。而且sizeof
是在编译时执行的,所以我认为sizeof(unsigned char)
比幻数1
要好。