Casting de `int` à `unsigned char`

Je suis en cours d'exécution le code C++ suivant sur Coliru:

#include <iostream>
#include <string>

int main()
{
     int num1 = 208;
     unsigned char uc_num1 = (unsigned char) num1;
     std::cout << "test1: " << uc_num1 << "\n";

     int num2 = 255;
     unsigned char uc_num2 = (unsigned char) num2;
     std::cout << "test2: " << uc_num2 << "\n";
}

Je suis de sortie:

test1: 

test2: 

C'est un exemple simplifié de mon code.

Pourquoi n'est-ce pas imprimer:

test1: 208

test2: 255

Suis-je abuser std::cout, ou ne suis-je pas faire le casting correctement?


Plus de fond

Je veux convertir de int à unsigned char (plutôt que unsigned char*). Je sais que tous mes nombres entiers entre 0 et 255 parce que je suis de les utiliser dans le modèle de couleur RGBA.

Je veux utiliser LodePNG pour coder des images. La bibliothèque dans example_encode.cpp utilise unsigned chars dans std::vector<unsigned char>& image:

//Example 1
//Encode from raw pixels to disk with a single function call
//The image argument has width * height RGBA pixels or width * height * 4 bytes
void encodeOneStep(const char* filename, std::vector<unsigned char>& image, unsigned width, unsigned height)
{
  //Encode the image
  unsigned error = lodepng::encode(filename, image, width, height);

  //if there's an error, display it
  if(error) std::cout << "encoder error " << error << ": "<< lodepng_error_text(error) << std::endl;
}
  • std::cin::operator<<(unsigned char) imprime le caractère de la représentation, il suffit de faire std::cout << num1 si vous voulez un entier.
  • Je suis d'imprimer les documents pour vérifier que la conversion travaillé. Je veux convertir l'entier à un unsigned char, donc je peux passer le unsigned char dans le encodeOneStep fonction dans le LodePNG de la bibliothèque.
  • lire ce.
  • Merci pour le lien, qui est la façon dont les personnages apparaissent dans le format ASCII lorsqu'il est passé à cout. Il ne veut pas me dire si mon plâtre de int à unsigned char est la bonne façon d'aborder ce problème. Voulez-vous confirmer que c'est la bonne façon?
  • Il n'est évidemment pas de la bonne façon, étant donné qu'au lieu de vous dire ce que vous voulez savoir, il a confondu vous.
InformationsquelleAutor user4063326 | 2014-10-31