在 c++ 中将结构类型转换为无符号字符*
Typecasting a struct to unsigned char* in c++
我的程序中有以下结构。
typedef unsigned char BYTE;
struct data
{
BYTE a;
BYTE b;
BYTE c;
};
有些台词晚了.....我创建结构的实例
data buffer[100][100];
在程序的后面,我必须将"buffer"实例类型转换为char *,以便被另一个函数使用。
int bmp_generator(char *filename, int width, int height, BYTE* data)
{
BITMAPFILEHEADER bmp_head;
BITMAPINFOHEADER bmp_info;
int size=width*height*3;
bmp_head.bfType=0x4D42;
bmp_head.bfSize=size + sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
bmp_head.bfReserved1=bmp_head.bfReserved2=0;
bmp_head.bfOffBits=bmp_head.bfSize-size;
bmp_info.biSize=40;
bmp_info.biWidth=width;
bmp_info.biHeight=height;
bmp_info.biPlanes=1;
bmp_info.biBitCount=24;// bits per pixel
bmp_info.biCompress=0;
bmp_info.biSizeImage=size;
bmp_info.biXPelsPerMeter=0;
bmp_info.biYPelsPerMeter=0;
bmp_info.biClrUsed=0;
bmp_info.biClrImportant=0;
FILE *fp;
if (!(fp=fopen(filename,"wb"))) return 0;
fwrite(&bmp_head,1, sizeof(BITMAPFILEHEADER), fp);
fwrite(&bmp_info,1,sizeof(BITMAPINFOHEADER), fp);
fwrite (data, 1, size, fp);
fclose(fp);
return 1;
}
[后面几行]
bmp_generator("./test.bmp", 512, 512, (BYTE*)buffer);
但是,当我运行上面的代码时,gcc编译器会给我一个警告,说 "警告:已弃用从字符串常量到'char*' [-Wwrite-strings]的转换">
有人可以帮助我解决这个问题。提前谢谢。
警告不是关于struct
而是关于THEfUNCTION
的第一个参数。似乎该函数将char*
作为第一个参数。现在,作为参数传递的字符串文本将转换为char*
但这种转换已弃用。
通常,只要您控制正在使用的函数的签名,最好将字符串文本转换为const char*
。
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 库特无符号字符
- 寻找一种更好的方法来表示无符号字符数组
- C++ 无符号字符 *{varName};-> C#
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 将浮点数转换为无符号字符数组并打印出来
- 在函数中返回无符号字符数组,但不返回指针
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 无符号字符打印其 ASCII 值
- 字符数组到无符号字符 *
- 是否可以在 c++ 中将两位数保存在无符号字符中