C将8位值转换为16位值

时间:2015-11-19 00:36:23

标签: c arrays parameters sizeof uint8t

我有一种情况,我将一个包含2个1字节值的数组传递给一个函数,但不知何故,该函数认为该数组长度为4个字节,这大大困扰了我的位操作。我甚至尝试将每个数组值明确地转换为uint8,但无济于事。关于可能发生的事情的任何想法?在Eclipse Mars.1上使用cygwin的gcc工具。

typedef char uint8; //char is 1 byte in my system.

void setBitArray(uint8 bitArray[], int first, int last, uint8 type) {
    if(first >= 0 && last < sizeof(bitArray) * 8) { // If the block is in bounds
        ...
    }
}
...
int main() {
    uint8 bitArray[2] = {(uint8)0, (uint8)0};
    setBitArray(bitArray, 0,10, 1);
    return 0;
}

修改

还有一件事。 sizeof(bitArray)在main()中产生2个字节。

2 个答案:

答案 0 :(得分:1)

将数组传递给函数会发送数组中第一个元素的地址,而不是整个数组作为对象。该函数无法识别传递的地址是什么类型,因此它无法为您提供大小。

简单的解决方案是在结构中随机传递数组大小或随机

typedef char uint8; //char is 1 byte in my system.

void setBitArray(uint8 bitArray[], int size, int first, int last, uint8 type) {
    if(first >= 0 && last < size * 8) { // If the block is in bounds
        ...
    }
}
...
int main() {
    uint8 bitArray[2] = {(uint8)0, (uint8)0};
    setBitArray(bitArray, (int)sizeof(bitArray), 0, 10, 1);

    return 0;
}  

答案 1 :(得分:0)

函数中传递的争论不是数组,而是指向数组的指针。 c中指针的大小为8字节。考虑我添加的代码,首先创建一个字符指针,然后使用malloc动态分配内存。由于bitArray2是一个char指针,因此它的大小为8而不是2.在传递arguements时会创建一个新的char指针,因此它的大小为8而不是2

    #include <stdio.h>
    typedef char uint8; //char is 1 byte in my system.

    void setBitArray(char bitArray[], int first, int last, uint8 type) {
        // if(first >= 0 && last < sizeof(bitArray) * 8) { // If the block is in bounds
            printf("Adress location = %ld\n", &bitArray);
            printf("%ld\n", sizeof(bitArray));         
        // }
    }
    int main() {
        char bitArray[2] ;  
        char *bitArray2=(char *)malloc(sizeof(char)*2);
        printf("Address = %ld\n", &bitArray);
        printf("s = %ld\n", sizeof(bitArray));    
        printf("s = %ld\n", sizeof(bitArray2));    
        setBitArray(bitArray, 0,10, 1);
        return 0;
    }