如何将512字节数组拆分为较小的部分?

时间:2018-12-20 04:39:24

标签: c arrays

我需要分割我的512字节数组,我有一个类似的函数

uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)

并且我有一个名为nandtest的数组,下面的两行代码可以正常工作。

int8_t nandtest[520] = {0};
CDC_Transmit_FS((uint8_t*)nandtest,512);

但是我需要将bytes数组分成两个256bytes数组并将其发送。 当我尝试这样做时:

CDC_Transmit_FS((uint8_t*)nandtest,256);
CDC_Transmit_FS((uint8_t*)nandtest[256],256);

由于第二行,编译器给我错误:

  

警告:从samller interger强制转换为uint8_t *(又名unsigned char *)   输入“ int8_t”(又名带符号的字符)

如何指示我要从数组的256字节位置开始传输函数的第二行?还是在这里创建两个不同的256字节数组是唯一的选择?

2 个答案:

答案 0 :(得分:1)

第一条语句是正确的,但是对于第二条语句,您需要使用运算符的地址,因为CDC_Transmit_FS函数期望缓冲区的地址,但是您正在将值传递到位置nandtest [256]。

CDC_Transmit_FS((uint8_t*)nandtest,256);

与:

相同
CDC_Transmit_FS((uint8_t*)&nandtest[0],256);

要传递第二个256字节缓冲区,请使用以下命令传递257字节的地址:

CDC_Transmit_FS((uint8_t*)&nandtest[256],256);

答案 1 :(得分:0)

您要获取元素的地址。

CDC_Transmit_FS((uint8_t*)&nandtest[256],256);

在C中,以名称引用的数组会产生该数组的地址(也就是说,该数组的元素0的地址)。当您引用数组中的元素时,您将获得元素本身。因此,在您的256字节示例的第二行中,您正在传递单个8位值,而该函数需要一个指向该值的指针。