繁体   English   中英

将 2d char 数组转换为 2d int 数组

[英]cast 2d char array to 2d int array

我有以下二维无符号字符数组来将图像存储为 0 到 255 之间的值:

unsigned char img[MAX_DIM][MAX_DIM];

我有一个 function,它采用 2d int 数组作为参数:

void transpose(int m[][MAX_DIM], int h, int w);

如何将 char 数组传递给 function? 我试过这样的东西但它不起作用:

transpose((int (*)[MAX_DIM])img, h, w);

您可以创建一个类型通用接口并实现两种不同的转置函数,一种用于 8 位数据,一种用于 32 位数据。 例子:

#include <stdint.h>
#include <stdio.h>

void transpose_32 (size_t h, size_t w, uint32_t m[h][w]){ puts(__func__); }
void transpose_8  (size_t h, size_t w, uint8_t  m[h][w]){ puts(__func__); }

#define transpose(m,h,w) _Generic(**(m), uint8_t: transpose_8, uint32_t: transpose_32)(h,w,m)

int main(void)
{
  const size_t MAX_DIM = 10;
  uint8_t  img1[MAX_DIM][MAX_DIM];
  uint32_t img2[MAX_DIM][MAX_DIM];
  
  transpose(img1, MAX_DIM, MAX_DIM);
  transpose(img2, MAX_DIM, MAX_DIM);

  return 0;
}

我想指出一些可能对您有帮助的事情。

首先,如果要将数组作为 function 参数传递,请不要在括号中指定大小,因为没有必要。 其实想想也是不对的。

其次,当你想将某些东西类型转换为 int 时,我猜你正在尝试第三行代码,表达式是: (int)charArray[]; 而不是 int charArray(*) [SIZE]

第三,也是最重要的一点,您不能将非算术 (char) 的内容强制转换为 (int) 的内容。 但是您可以做的是使用将参数转换为 int 的 atoi function。

int atoi(const char *str);

此外,下次你想将数组传递给 function 时,你应该更喜欢引用它并将数组的地址作为参数传递,而不是包含内容本身的数组,因为无法返回转换后的整个数组从转置 function,即使你设法按照你想要的方式处理它。

我希望我能帮到一点点,但如果你的问题没有解决,请尝试发布你的问题陈述,以便我们能够更好地帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM