垫打印线与白色空间C ++

时间:2015-01-19 21:03:03

标签: c++ arrays pointers

在C ++中,我使用 unsigned char 指针来保存字节数组,这样我就可以在每个元素中为打印行添加8位颜色代码。

我有一个数组保存数据,一个数组保存空格,我使用for循环填充第三个数组,以便数据位于开头,空白区位于结尾。

创建指针时,当我在运行时监视内存时,所有元素的默认值都为0xCD,它在颜色图表上是洋红色。我使用for循环用0x00填充我想要的字节,但它不会写入第三个数组的默认数组值。

所以,我坚持使用我的打印机打印洋红色而不是白色空间。然而,我可以只用数据就可以很好地写出那个数组。但不是空白。我不确定是什么原因。任何人都可以给我任何见解吗?这是我的代码......

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;
  }
}

1 个答案:

答案 0 :(得分:1)

乍一看,您的代码没有错误,但我看到的内容看起来很可疑。我在谈论这条线:

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];
}

使代码更具可读性。