Gå til innhold

Bone's Offisielle C++ hjelpetråd


Anbefalte innlegg

Videoannonse
Annonse

Hvis den er 1010 0000 så er dette allerede en char

du mener 10100000 00000000 00000000 00000000 f.eks.?

får å hente mest signifikante må du flytte bitmønsteret mot høyre

10100000 00000000 00000000 00000000 >> 8 =
00000000 10100000 00000000 00000000 >> 1 = 
00000000 01010000 00000000 00000000

 

Så for å hente ut det mest signifikante bytet i en int, må du flytte bitmønsteret 24 bit til høyre.

Lenke til kommentar

Joda er med på at det er en char. Men variabelen er nå av typen int og må konverteres til char for å få den sendt ut på seriellporten.

 

Etter mye leting har jeg funnet ut at denne funksjonen til dels fungerer; char CharAway = static_cast<char>(LSB);

 

Men problemet er at det blir static char og ikke bare char.

Så jeg kan ikke bruke den til noe

 

Her er ett utdrag fra programmet der jeg må konvertere int til char:

	
int outDataLSB = (LSB & adressHexLSB); 
int outDataMSB = (MSB & adressHexMSB);

char CharAwayLSB = static_cast<char>(outDataLSB);
char CharAwayMSB = static_cast<char>(outDataMSB);

Seriell.send (CharAwayLSB);
Seriell.send (CharAwayLSB);

 

Jeg har for eksempel int outDataMSB som skal konverteres til char CharAwayMSB. Men static char can ikke brukes i Seriell.send.

 

Viss noen har ett raskt tips til hva jeg kan bruke i stedet for static_cast så blir jeg glad. :)

 

Edit: googlet i vei til ingen nytte. Brukte dette i stedet, men Seriell.send sliter visst alikevell.

char CharAway = (char) LSB;

Var tydligvis ikke dette som var problemet. Im so screwed :(

Endret av Akidon
Lenke til kommentar

Her er hele programmet:

#include <stdlib>
#include <cstdlib>
#include <stdafx.h>
#include <iostream>
using namespace std;

char innData[256];
char CharAway[16];
char recieved_char[16];
int hexData;

int main()
{

cin >> innData;


int hexData = strtol(innData , NULL, 16);


int LSB = (hexData & 0x0F)<<4;
int MSB = (hexData & 0xF0);

cout << "Inndata i desimal " <<hexData << endl;
cout << "LSB i desimal " << LSB << endl;
cout << "MSB i desimal " << MSB << endl;


//char CharAway = static_cast<char>(LSB);
char CharAway = (char) LSB;
strcpy (recieved_char,  CharAway);
cout << "Char out " << CharAway << endl;
return 0;
}

 

Og her er feilmeldingen jeg får:

.\RHG GUI v2.01.cpp(52) : error C2734: 'CharAwayLSB' : const object must be initialized if not extern

 

Noen ideer?

Lenke til kommentar

Jeg fant ut av det :)

 

Bit skiften er riktig. Jeg må ha LSB(data) og MSB(data) som MSB(byte) i byten jeg skal sende. LSB(byte) inneholder adressen til hvor jeg skal lagre MSB(data) og LSB(data).

 

Dette ble uansett løsningen på problemet:

 

	unsigned char CharAwayLSB[2];//= (char) outDataLSB;
CharAwayLSB[0] = (char) outDataLSB;

 

Funksjonene mine kunne ikke bruke en enkelt char så jeg måtte ha en char tabell, der byten min var i index 0.

Lenke til kommentar
  • 3 uker senere...

Jaja trenger mere hjelp her :)

 

Jeg trodde jeg hadde fikset dette men det hadde jeg ikke ^^

 

Saken er at jeg har en char. For eksempel A som skal konverteres til int.

 

Jeg skal altså ha ascii koden til bokstaven A inn i en integer.

 

Noen som har ett tips til en sliten stakkar?

Lenke til kommentar

Du har nok rett i det. Tingen er at jeg er nødt til å ha ett char array inn. Men i det char arayet er det bare en char.

Og denne må konverteres til int.

 

Edit: Jeg tror jeg klarte det :)

recievedIntMSB = int (recieved_charMSB[0]);

 

Her er hele koden:

 

#include <stdlib>
#include <cstdlib>
#include <stdafx.h>
#include <iostream>
#include <string>
using namespace std;



char recieved_charLSB[16];
char recieved_charMSB[16];
char prossessed_charLSB;
char prossessed_charMSB;
string recieved_transmition;




string destination;
int main()
{

cout << "Enter LSB" << endl;
cin >> recieved_charLSB;


cout << "Enter MSB" << endl;
cin >> recieved_charMSB; // Jeg er nødt til å ha ettt char array inn

//Så jeg tenkte å konvertere til char.
int recievedIntLSB; //denne kan brukes videre
recievedIntLSB = int (prossessed_charLSB);



int IntLSB = (recievedIntLSB & 0xF0)>>4;
cout << "LSB " << recievedIntLSB << endl;

//samme her som over
int recievedIntMSB;
recievedIntMSB = int (prossessed_charLSB);

int IntMSB = (recievedIntMSB & 0xf0);
cout << "MSB " << recievedIntMSB << endl;



int IntData = IntMSB | IntLSB;
char IntDataHex[16];
sprintf(  IntDataHex, "%X", IntData );
char *DataOutHex;
DataOutHex = IntDataHex;

recieved_transmition.insert(0,DataOutHex); 

cout << "String out " << DataOutHex << endl;
return 0;
}

Endret av Akidon
Lenke til kommentar
  • 2 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...