Gå til innhold

Bone's Offisielle C++ hjelpetråd


Anbefalte innlegg

Videoannonse
Annonse
Skrevet

Jeg har nå en int som er foreksempel "1010 0000".

Jeg vil konvertere denne til char. Hvordan gjør jeg dette?

 

Jeg prøvde dette uten suksess; CharAway=(int) LSB;

Skrevet

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.

Skrevet (endret)

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
Skrevet

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?

Skrevet

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.

  • 3 uker senere...
Skrevet

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?

Skrevet

Dette kompilerer.

 

int kode = 'a';

 

Men med denne får jeg feilen: error C2440: 'initializing' : cannot convert from 'char [16]' to 'int'

 

char a = 'a';
int b = a;

 

Noen andre lyse ideer?

Skrevet

Ser ikke noe problemer med code over, kan du legge ved hele koden?

 

koden jeg prøvde å kompilere:

int main()
{
 char a = 'a';
 int b = a;

 return 0;
}

 

Ut fra erroren så virker det som om a er en char[16] array.

Skrevet (endret)

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
  • 2 uker senere...
Skrevet (endret)

Hvorfor får jeg "undefined reference to `sinf'" når jeg skal kompilere dette?

#include <math.h>

int main (void)
{
float a;
a = sinf(1.00);

return(0);
}

Edit: gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)

Endret av endrebjo
Skrevet

Her er full output:

endre@endre:~$ gcc sine.c
/tmp/ccyAEqk6.o: In function `main':
sine.c:(.text+0x1a): undefined reference to `sinf'
collect2: ld returned 1 exit status
endre@endre:~$

Trenger jeg flere pakker enn dette for å kunne kompilere den?:

post-30930-1213486743_thumb.png

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...