unsigned char数组长度

时间:2018-05-07 10:23:31

标签: c++ arrays size-t

我有一些计算数组的大小。我想动态地拥有它,所以当我调用它时我不想发送函数的原型

我尝试了一些功能,但没有一个是好的。这是我尝试过的所有函数和变量,原始数组:

unsigned int chnid = 0;
unsigned char aes_key[16] = {0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C};
unsigned char aes_iv[16] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,0x0F};

这是函数原型:

int init(unsigned int *chnid, unsigned char *aes_key, unsigned char *aes_iv)

他的电话:

s32Ret = init(&chnid, aes_key, aes_iv);

我做的所有测试:

size_t keyLen = sizeof aes_key;
size_t keyLen2 = strlen((char*)aes_key);
size_t keyLen3 = strlen(reinterpret_cast<char *>(aes_key));

结果:

keyLen = 4
keyLen2 = 20
keyLen3 = 20

我的问题可能是size_t类型,还是我必须更改init函数的调用?

1 个答案:

答案 0 :(得分:1)

也许我误解了这个问题,但你只是想找到数组的大小吗?如果是这样 - 为什么不使用sizeof?

    unsigned int chnid = 0;
    unsigned char aes_key[16] = { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C };
    unsigned char aes_iv[16] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,0x0F };
    cout << sizeof aes_key << endl;

输出:16

编辑: 好的,您将数组传递给函数,并查询该函数内的数组大小。好吧,正如其他评论所指出的,当在问题内部时,指针只是一个指针,所以它的大小是4.如果你想知道数组大小,使用像std :: array这样的容器然后你可以使用这个大小方法。要将std :: array传递给函数,请参阅SO上的其他帖子,其中一些在上面的注释中提到(例如Passing a std::array of unknown size to a function