制作指向两个字节的指针

时间:2009-08-19 13:26:43

标签: c pointers i2c

除了呼吸之外,我是一个完整的新手,如果我不清楚,请对不起,但是这里有:

我在C中有一个函数,它通过I2C总线将字节写入电路,在头文件中它看起来像这样:

BOOL WINAPI JidaI2CWrite(HJIDA hJida, DWORD dwType, BYTE bAddr, LPBYTE pBytes, DWORD dwLen);
  • hJida:董事会成员。
  • dwType:基于零的I2C编号 总线。
  • bAddr:设备上的地址 I2C总线,完整的8位原样 写到公共汽车上。
  • pBytes:指向位置的指针 包含字节。
  • dwLen:要写入的字节数。

如果我只想将一个字节写入地址为0x98的电路,我会这样做:

unsigned char writing[1];
writing[0]=0x10;

unsigned char *pointer;
pointer = &writing[0];


JidaI2CWrite(hJida,0,0x98,pointer,1);

这似乎有效,但如果我想写两个字节,比如0x10FF,它就不会。那么如何制作一个指向两个字节而不是一个字节的指针呢?

由于

5 个答案:

答案 0 :(得分:10)

你想要这样的东西:

unsigned char writing[2];
writing[0] = 0x01;
writing[1] = 0x02;

JidaI2CWrite(hJida, 0, 0x98, writing, 2);

请注意,C中的数组通常可以像指针一样使用。变量writing可以被认为只是指向一块内存的指针,在这种情况下,该内存块的大小为2个字节。创建另一个指向该位置的指针是多余的(在本例中)。

请注意,您可以指向任意数量的字节:

unsigned char writing[12];

//fill the array with data

JidaI2CWrite(hJida, 0, 0x98, writing, 12);

答案 1 :(得分:6)

试试这个......

//A buffer containing the bytes to be written
unsigned char writeBuffer[] = {0x10, 0xFF}; 

//writeBuffer itself points to the start of the write buffer
//you dont need an extra pointer variable
//Indicate the size of the buffer in the call to the function
//pointers do not carry array size information with them (in C/C++)
JidaI2CWrite(hJida,0,0x98,writeBuffer,2); 

或更好

unsigned char writeBuffer[] = {0x10, 0xFF};

JidaI2CWrite(hJida,0,0x98,writeBuffer
              ,sizeof(writeBuffer)/sizeof(unsigned char));

注意:sizeof(writeBuffer)/sizeof(writeBuffer[0])会自动为您计算数组的大小(

答案 2 :(得分:1)

好像dwLen参数是要写入的字节数。所以:

unsigned char writing[2];
writing[0] = 0x10;
writing[1] = 0xff;
JidaI2CWrite(hJida, 0, 0x98, writing, 2);

请注意,使用指向pointer的{​​{1}}可能不应该按照书面形式工作,因为这会将writing[1]设置为指向之后的字节你真的想写的字节。我怀疑这是一个错字,但如果没有,你可能希望在继续之前检查你现有的代码。

答案 3 :(得分:1)

writing已经是你想要的指针。

摆脱pointer

JidaI2CWrite的最后一个参数是你想要写的字节数。

指针pBytes指向要写入的块的开头。

答案 4 :(得分:0)

我看到两个选择:

1)单独写下来:

写[0] = 0x10; 写[1] = 0xFF;

2)检查系统上的短路是否为2Bytes并使用短路。

可能是((短*)写)[0] = 0x10FF;

另外,你需要声明写作是写作[2];

然后,正如其他人所说,写下2个字节...