簡體   English   中英

將double轉換為unsigned char?

[英]Converting double to unsigned char?

我正在嘗試將(double)的矩陣轉換為無符號字符,以便隨后可以寫入.pmg文件...但是它不起作用。

void writePNG(vector<double>& matrix)
{
vector<unsigned char> image;
ofstream myfile;

myfile.open("newFile.txt", ios::out); // writing to .txt file for now for testing.

if(!myfile.is_open())
{
    cout << "Cannot open file";
}
for(int i=0; (i < 512*512); i++)
{
    image[i] = (unsigned char) matrix[i];
}

myfile.close();
}

它不會轉換數據。 有任何想法嗎?? 謝謝 :)

  • 錯誤 :您正在創建大小為0的向量,然后寫入其不存在的元素。
  • 錯誤 :您永遠不會將數據寫入文件
  • 樣式 :您不必要地關閉文件。 fstream對象超出范圍時,它將關閉
  • 樣式 :您可以循環復制數據。 使用vector::vector可以更清楚地顯示您的意圖。
  • 潛在的錯誤 :無論輸入向量的大小如何,您都會創建512x512的輸出向量。
  • SSCCE您的測試用例不完整。

嘗試這個:

#include <vector>
#include <iostream>
#include <fstream>

void writePNG(const std::vector<double>& matrix)
{
  std::ofstream myfile("newFile.txt", std::ios::out); 

  if(!myfile.is_open())
  {
    std::cout << "Cannot open file";
  }
  std::vector<unsigned char> image (matrix.begin(), matrix.end());
  myfile.write(reinterpret_cast<const char*>(&image[0]), image.size());
}

int main () {
  writePNG({
    72, 101, 108.1, 108.2,
    111, 0x2c, 0x20, 0x77,
    0x6f, 0x72, 0x6c,
    100.3,  10.4});
}

您正在使用vector的默認構造函數創建image ,該構造函數將vector初始化為空(不包含任何元素)。 下標符號( image[i] )不創建元素,僅分配給已經存在的元素。

您有(至少)兩種方法來修復它:

  • 使用分配必要大小的vector的ctor聲明imagevector<unsigned char> image(512*512) -這將使用默認值的512 * 512個元素( unsigned char為0)填充向量
  • 使用push_back方法一一添加元素: image.push_back((unsigned char) matrix[i]);

您最終還必須將image的內容寫入myfile

注意:使用static_cast<unsigned char>(...)而不是C樣式(unsigned char) ...是一個好習慣,因為前者會發現后者不會標記的錯誤; 在這種情況下,這不是問題

您的圖片矢量大小為零-您至少必須執行push_back才能添加元素。 同樣,雙精度數的大小與char的大小不同,因此您將丟失信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM