[英]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();
}
它不會轉換數據。 有任何想法嗎?? 謝謝 :)
fstream
對象超出范圍時,它將關閉 vector::vector
可以更清楚地顯示您的意圖。 嘗試這個:
#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聲明image
: vector<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.