2012-12-23 104 views
0

我学习,我想知道的最佳方式是如何做到以下几点阵列复制,考虑以下代码:将字节复制到字节数组?

void Cast1LineSpell(UINT Serial, char *chant) 
{ 
    byte packet[] = { 0x0F, 0x03, 
     (Serial >> 24) & 0xFF, (Serial >> 16) & 0xFF,(Serial >> 8) & 0xFF, Serial & 0xFF, 
     0x9A, 0x92, 0x00, 0x00, 0x00, 0x1A }; 

    byte prepareSpell[2] = { 0x4D, 0x01 }; 

    byte chant_length = sizeof(chant)/sizeof(chant[0]); 
    byte chant_name[] = { 0x4E, chant_length, }; // <= how can i put the bytes in chant* into the rest of this array, and then append bytes 0x00 and 0x4E on to the end of it? 
} 

我怎样才能把那些的*chant里面的字节,然后把它们到chant[]的末尾,然后在其末尾添加字节0x000x4E

任何人都可以提供解决方案吗? 备受赞赏。

+0

应该如何运作的?你期望输出什么? –

+0

我想chant []输出0x4D,0x01,chant_length,无论是在* chant,0x00,0x4E – Dean

+1

你最好使用像'std :: vector '这样的容器,因为它被标记了** C++ ** .. –

回答

0

您正在使用动态数组所以sizeof(chant)将始终是一个指针的大小,和sizeof(chant)/sizeof(chant[0])不会数组中元素的数目。这只适用于静态阵列

此外,您正在重新声明chant这只是一个错误。

总之,由于您不知道chant中的元素数量,因此无法做到您想要做的事情。

+0

我不知道你的意思我认为sizeof(array)/ sizeof(array [0])给了我elemenths的数量? – Dean

+1

@Dean:它应用于_static array_时,而不是在将它应用于指针时。指针的大小与数组的大小不一样... –

+0

@Dean(而“静态数组”我们的意思是“数组”。) – melpomene

0

根据我的理解,在C++中,传递给函数的所有数组无论是静态分配还是动态分配,都将被视为指针,或者甚至可以将参数写为char chant[](即只有第一个元素的地址通过)。

例子:

void f(int value[]){ 
    cout<<"size in f: "<<sizeof(value)/sizeof(int)<<endl; 
} 

int main(){ 
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; 

    cout<<"size in main: "<<sizeof(arr)/sizeof(int)<<endl; 

    f(arr); 

    return 0; 
} 

结果是:

size in main: 8 
size in f: 1 

因此,大家可以看到,在f()value[]是一样的value *,并sizeof(value)是指针的大小。

当你将一个数组传递给一个函数时,你应该(总是)传递这个长度。

void f(int value[], size_t size){ 
    cout<<"size in f: "<<size<<endl; 
} 

int main(){ 
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; 

    size_t size = sizeof(arr)/sizeof(int); 

    cout<<"size in main: "<<size<<endl; 

    f(arr, size); 

    return 0; 
} 

输出:

size in main: 8 
size in f: 8 
相关问题