C++中sizeof和. length()的区别
时间: 2023-04-07 15:05:37 浏览: 128
sizeof是C语言中的一个运算符,用于计算数据类型或变量所占用的字节数,而length()是C++中string类的一个成员函数,用于返回字符串的长度。两者的区别在于,sizeof是针对数据类型或变量的,而length()是针对字符串的。
相关问题
sizeof和length在c++的区别
`sizeof`和`length`在C中是不同的概念。
`sizeof`是一个运算符,它可以用来计算数据类型或变量所占用的字节数。例如,`sizeof(int)`将返回`4`,因为`int`类型在大多数系统上占用4个字节。
`length`则通常用于数组或字符串,表示数组或字符串的元素数量或字符数量。例如,对于一个字符数组`char str[] = "Hello";`,`strlen(str)`将返回`5`,因为字符串中有5个字符(包括结尾的空字符)。
需要注意的是,`sizeof`计算的是数据类型或变量本身所占用的字节数,而`length`计算的是数组或字符串中元素的数量或字符的数量。在某些情况下,它们可能会产生相同的结果,但这是因为数组或字符串的元素类型和大小已知,并且已经在编译时确定了。
private byte[] RasterBitmap(uint x, uint y, int iType) { Image a = Image.FromFile("C:\123.bmp"); int Height = a.Height; int Width = a.Width; Bitmap oldBitmap = (Bitmap)a; int wwww=(int)((Width - 1) / 8+1); byte[] bmp = new byte[Height * wwww]; Color pixel; for (int y1 = 0; y1 < Height; y1++) { for (int x1 = 0; x1 < Width; x1++) { pixel = oldBitmap.GetPixel(x1, y1);//GetPixel函数运行速度有点慢 int r, g, b, Result = 0; r = pixel.R; g = pixel.G; b = pixel.B; //实例程序以加权平均值法产生黑白图像 switch (iType) { case 0://平均值法 Result = ((r + g + b) / 3); break; case 1://最大值法 Result = r > g ? r : g; Result = Result > b ? Result : b; break; case 2://加权平均值法 Result = ((int)(0.7 * r) + (int)(0.2 * g) + (int)(0.1 * b)); break; } if (Result <= (256 / 2)) bmp[y1 * wwww + x1 / 8] |= (byte)(0x80 >> (x1 % 8)); } } for (int i = 0; i < bmp.Length; i++) bmp[i] =(byte) ~bmp[i]; byte[] command = Encoding.ASCII.GetBytes("BITMAP "+x+","+y+"," + ((a.Width - 1) / 8 + 1) + "," + a.Height + ",0,");//位图BITMAP打印指令 byte[] command1 = Encoding.ASCII.GetBytes("\r\n"); byte[] data = new byte[bmp.Length + command.Length + command1.Length]; Array.Copy(command, data, command.Length); Array.Copy(bmp, 0, data, command.Length, bmp.Length); Array.Copy(command1, 0, data, command.Length + bmp.Length, command1.Length); return data; }将改方法转为c++代码
你可以将这段C#代码转换为C++代码。下面是转换后的C++代码:
```cpp
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
struct Color {
int r;
int g;
int b;
};
std::vector<uint8_t> RasterBitmap(uint x, uint y, int iType)
{
std::string filename = "C:\\123.bmp";
std::ifstream file(filename, std::ios::binary);
if (!file)
{
std::cout << "Unable to open file: " << filename << std::endl;
return std::vector<uint8_t>();
}
// Read bitmap header
char header[54];
file.read(header, 54);
int width = *(int*)&header[18];
int height = *(int*)&header[22];
int wwww = (width - 1) / 8 + 1;
std::vector<uint8_t> bmp(height * wwww, 0);
Color pixel;
for (int y1 = 0; y1 < height; y1++)
{
for (int x1 = 0; x1 < width; x1++)
{
file.read((char*)&pixel, sizeof(Color));
int r = pixel.r;
int g = pixel.g;
int b = pixel.b;
int result = 0;
switch (iType)
{
case 0: // 平均值法
阅读全文