带白色 space C++ 的移印线
pad print line with white space C++
在 C++ 中,我使用 unsigned char 指针来保存字节数组,这样我就可以在打印行的每个元素中放入 8 位颜色代码。
我有一个数组保存数据,一个数组保存白色 space,我正在使用 for 循环填充第三个数组,以便数据在开头,白色 space在最后。
创建指针时,由于我在运行时监视内存,所有元素的默认值为0xCD
,在颜色图表上为洋红色。我使用 for 循环用 0x00 填充我想要的字节,但它不会覆盖第三个数组的默认数组值。
所以,我的打印机打印的是洋红色而不是白色 space。然而,我可以只用数据覆盖那个数组。但不是白色space。我不确定这是什么原因。谁能给我任何见解?这是我的代码...
PrintLine(unsigned char* pbData, unsigned long ulDataSize, UINT xoffset)
{
if (xoffset > 0)
{ //create pointer to byte array for xoffset
unsigned char* offsetData;
offsetData = new unsigned char[(xoffset / 8)]; //x offset is divided by 8
//to convert pixels to bytes
//create pointer to byte array to hold image data and offset data
unsigned char* finalData;
finalData = new unsigned char[ulDataSize + (xoffset / 8)];
//begin final data with image data passed into the function
for (int count = 0; count < ulDataSize; count++)
{
finalData[count] = pbData[count];
}
//populate offset data with blank bytes
for (int count = 0; count < (xoffset / 8); count++)
{
offsetData[count] = 0x00;
}
//add blank data for offset to finalData
int position = 0;
for (int count = ulDataSize; count < ulDataSize + (xoffset / 8);count++)
{
finalData[ulDataSize] = offsetData[position];//also tried =0x00
position++;
}
//Send data to printer.
if (!(Write(finalData, ulDataSize + (xoffset / 8)))
{
return FALSE;
}
return TRUE;
}
}
乍一看你的代码没有错误,但我看到了一些看起来很可疑的东西。我说的是这条线:
finalData[ulDataSize] = offsetData[position]; //also tried =0x00
我想你想要的是:
finalData[count] = offsetData[position];//also tried =0x00
另一方面,您可以这样编写循环:
for (int count = 0; count < (xoffset / 8); count++)
{
finalData[ulDataSize + count] = offsetData[count];
}
使代码更具可读性。
在 C++ 中,我使用 unsigned char 指针来保存字节数组,这样我就可以在打印行的每个元素中放入 8 位颜色代码。
我有一个数组保存数据,一个数组保存白色 space,我正在使用 for 循环填充第三个数组,以便数据在开头,白色 space在最后。
创建指针时,由于我在运行时监视内存,所有元素的默认值为0xCD
,在颜色图表上为洋红色。我使用 for 循环用 0x00 填充我想要的字节,但它不会覆盖第三个数组的默认数组值。
所以,我的打印机打印的是洋红色而不是白色 space。然而,我可以只用数据覆盖那个数组。但不是白色space。我不确定这是什么原因。谁能给我任何见解?这是我的代码...
PrintLine(unsigned char* pbData, unsigned long ulDataSize, UINT xoffset)
{
if (xoffset > 0)
{ //create pointer to byte array for xoffset
unsigned char* offsetData;
offsetData = new unsigned char[(xoffset / 8)]; //x offset is divided by 8
//to convert pixels to bytes
//create pointer to byte array to hold image data and offset data
unsigned char* finalData;
finalData = new unsigned char[ulDataSize + (xoffset / 8)];
//begin final data with image data passed into the function
for (int count = 0; count < ulDataSize; count++)
{
finalData[count] = pbData[count];
}
//populate offset data with blank bytes
for (int count = 0; count < (xoffset / 8); count++)
{
offsetData[count] = 0x00;
}
//add blank data for offset to finalData
int position = 0;
for (int count = ulDataSize; count < ulDataSize + (xoffset / 8);count++)
{
finalData[ulDataSize] = offsetData[position];//also tried =0x00
position++;
}
//Send data to printer.
if (!(Write(finalData, ulDataSize + (xoffset / 8)))
{
return FALSE;
}
return TRUE;
}
}
乍一看你的代码没有错误,但我看到了一些看起来很可疑的东西。我说的是这条线:
finalData[ulDataSize] = offsetData[position]; //also tried =0x00
我想你想要的是:
finalData[count] = offsetData[position];//also tried =0x00
另一方面,您可以这样编写循环:
for (int count = 0; count < (xoffset / 8); count++)
{
finalData[ulDataSize + count] = offsetData[count];
}
使代码更具可读性。