/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Kovertering af WORD til char i C/C++
Fra : Flare


Dato : 24-10-02 21:57

Hejsa

Jeg skal benytter structed SYSTEMTIME defineret i windows.h

Structed indeholder en rækker variabler såsom hour, day, year etc.

Problemet er at disse variabler defineret som WORD og jeg skal returnere en
char*

Dvs. Jeg skal have fyldt en char array ud med disse WORDS variabler så jeg
returnere tiden.

NB det skal være SYSTEMTIME structed jeg bruger.

Jeg har kigget lidt på sprintf som måske kunne men jeg kender kun C++ så det
er ukendt område.
Men jeg prøvede uden held noget ligende dette.:

char aar[5];
sprintf(aar, "%X", m_tid.wYear); //X prøvede jeg at udskifte med d,f,c og s

Hvordan få jeg du irriterende words lavet om til chars?

Tak for hjælpen på forhånd
Anders




 
 
Thomas Lykkeberg (27-10-2002)
Kommentar
Fra : Thomas Lykkeberg


Dato : 27-10-02 10:20

On Thu, 24 Oct 2002 22:56:43 +0200, "Flare" <dct_flare@hotmail.com>
wrote:

>Hejsa
>
>Jeg skal benytter structed SYSTEMTIME defineret i windows.h
>
>Structed indeholder en rækker variabler såsom hour, day, year etc.
>
>Problemet er at disse variabler defineret som WORD og jeg skal returnere en
>char*
>
>Dvs. Jeg skal have fyldt en char array ud med disse WORDS variabler så jeg
>returnere tiden.
Kig på MSDN......

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_SYSTEMTIME_Structure.asp

/Thomas

Flare (27-10-2002)
Kommentar
Fra : Flare


Dato : 27-10-02 18:19

> Kig på MSDN......
>
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/
_mfc_SYSTEMTIME_Structure.asp

Takker: Men det virker sgu ikke helt efter hensigten. Nu Kender jeg intet
til C kommandoer, men det her tager efter MSDN:

wsprintf(str, "%s %u/%u/%u %u:%u:%u:%u", day, m_tid.wYear, m_tid.wMonth,
m_tid.wDay,m_tid.wHour, m_tid.wMinute, m_tid.wSecond, m_tid.wMilliseconds);

Det lægger "%s %u/%u/%u %u:%u:%u:%u" i strengen str og det kan da ikke være
meningen. Hvad har de/jeg gjirt galt. Jeg kunne forstille mig at det var
meningen variabler skulle indsættes på pladserne med %u og ikke "%u".

Jeg bruger MS Visual c++ 7.0 (.net). Håber nogen kan hjælpe.

Anders






Flare (27-10-2002)
Kommentar
Fra : Flare


Dato : 27-10-02 18:25

> Kig på MSDN......
>
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/
_mfc_SYSTEMTIME_Structure.asp

Takker: Men det virker sgu ikke helt efter hensigten. Nu Kender jeg intet
til C kommandoer, men det her tager efter MSDN:

wsprintf(str, "%s %u/%u/%u %u:%u:%u:%u", day, m_tid.wYear, m_tid.wMonth,
m_tid.wDay,m_tid.wHour, m_tid.wMinute, m_tid.wSecond, m_tid.wMilliseconds);

Det lægger "%s %u/%u/%u %u:%u:%u:%u" i strengen str og det kan da ikke være
meningen. Hvad har de/jeg gjirt galt. Jeg kunne forstille mig at det var
meningen variabler skulle indsættes på pladserne med %u og ikke "%u".

Jeg bruger MS Visual c++ 7.0 (.net). Håber nogen kan hjælpe.

Anders







Thomas Lykkeberg (28-10-2002)
Kommentar
Fra : Thomas Lykkeberg


Dato : 28-10-02 09:56

>Takker: Men det virker sgu ikke helt
>efter hensigten. Nu Kender jeg intet
>til C kommandoer, men det her tager efter MSDN:
>
>wsprintf(str, "%s %u/%u/%u
>%u:%u:%u:%u", day, m_tid.wYear,
>m_tid.wMonth,
>m_tid.wDay,m_tid.wHour,
>m_tid.wMinute, m_tid.wSecond,
>m_tid.wMilliseconds);
>
>Det lægger "%s %u/%u/%u %u:%u:%u:%u"
>i strengen str og det kan da ikke være
>meningen. Hvad har de/jeg gjirt galt.
>Jeg kunne forstille mig at det var
>meningen variabler skulle indsættes
>på pladserne med %u og ikke "%u".
Jo det er rigtigt... ?? Men jeg ved ikke hvorfor det ikke virker.

Prøv at brug sprintf() i stedet for. wsprintf() er bare wide
character udgaven (2 byte pr. tegn), af sprintf.

>Jeg bruger MS Visual c++ 7.0 (.net).
>Håber nogen kan hjælpe.
Kender kun til 6.0...

/Thomas


Flare (28-10-2002)
Kommentar
Fra : Flare


Dato : 28-10-02 14:43

> Prøv at brug sprintf() i stedet for. wsprintf() er bare wide
> character udgaven (2 byte pr. tegn), af sprintf.

Ok. Det må så stå hen i det uvisse hvorfor M$ vælger at bruge wsprintf for
det virker jo med sprintf. Så mange tak for hjælpen thomas

Anders



Byrial Jensen (28-10-2002)
Kommentar
Fra : Byrial Jensen


Dato : 28-10-02 20:34

Thomas Lykkeberg <thomas.lykkeberg@privat.dk> skrev:
> Prøv at brug sprintf() i stedet for. wsprintf() er bare wide
> character udgaven (2 byte pr. tegn), af sprintf.

Der er en meget væsentlig forskel mellem de 2 funktioner: sprintf()
er standard C. Det er wsprintf() ikke, jeg har faktisk aldrig hørt
om den før. Der findes derimod en standardfunktion som hedder
swprintf(), og som har følgende prototype erklæret i <wchar.h>:

int swprintf(wchar_t * restrict s,
size_t n,
const wchar_t * restrict format, ...);

Jeg vil i øvrigt i almindelighed fraråde brug af sprintf() til
fordel for snprintf() (eller swprintf()) da det kan være særdeles
svært at være sikker på at undgå bufferoverløb med sprintf().
swprintf() findes kun i den sikre "n"-udgave selvom det ikke
fremgår af navnet.

--
Skal musik- og edb-industrien have ret til fratage forbrugerne deres
rettigheder i henhold til Ophavsretloven, begrænse konkurrencen og
fremme monopoldannelse ved hjælp af tekniske midler? Sig nej! Nu!
Støt underskriftsindsamlingen på http://www.digitalforbruger.dk

Mogens Hansen (28-10-2002)
Kommentar
Fra : Mogens Hansen


Dato : 28-10-02 21:43


"Byrial Jensen" <bjensen@nospam.dk> wrote in message
news:slrnarr30a.17c.bjensen@ask.ask...

> Det er wsprintf() ikke, jeg har faktisk aldrig hørt
> om den før.

wsprintf er en særlig udgave af sprintf, som er indbygget i MS-Windows (w
står for Windows - ikke wide som det tidligere blev hævdet).
Hvis man bruger den opnår man:
* man sparer lidt kode plads, fordi sprintf ikke skal linkes med i
programmet
* man kan ikke umiddelbart flytte programmet til andre platforme, hvis man
ønsker det
* man kan ikke konvertere floating-point tal til tekst

wsprintf kører wide character hvis preprocessor makroen UNICODE er
defineret.
wsprintf er i virkeligheden selv en preprocessor makro (!!!), der mapper til
enten wsprintfW eller wsprintfA.

Venlig hilsen

Mogens Hansen



Flare (29-10-2002)
Kommentar
Fra : Flare


Dato : 29-10-02 17:06

Lige mht alt denne diskussion om den ene og den anden C XXprintXX funktion.
Findes der så ikke en måde at klare opgaven på i "ren" C++ ? Altså at få det
word koverteret til en char eller int?

Mvh
Anders




Byrial Jensen (29-10-2002)
Kommentar
Fra : Byrial Jensen


Dato : 29-10-02 17:57

Flare <dct_flare@hotmail.com> skrev:
> Lige mht alt denne diskussion om den ene og den anden C XXprintXX funktion.
> Findes der så ikke en måde at klare opgaven på i "ren" C++ ? Altså at få det
> word koverteret til en char eller int?

Nej, det kan hverken klares i ren C eller i ren C++, for der findes
ikke noget som hedder "word" eller "WORD" i de sprog.

--
Skal musik- og edb-industrien have ret til fratage forbrugerne deres
rettigheder i henhold til Ophavsretloven, begrænse konkurrencen og
fremme monopoldannelse ved hjælp af tekniske midler? Sig nej! Nu!
Støt underskriftsindsamlingen på http://www.digitalforbruger.dk

Mogens Hansen (29-10-2002)
Kommentar
Fra : Mogens Hansen


Dato : 29-10-02 18:48


"Flare" <dct_flare@hotmail.com> wrote in message
news:3dbeb210$0$97618$edfadb0f@dspool01.news.tele.dk...
> Lige mht alt denne diskussion om den ene og den anden C XXprintXX
funktion.
> Findes der så ikke en måde at klare opgaven på i "ren" C++ ? Altså at få
det
> word koverteret til en char eller int?

Du kan bruge klassen std::ostringstream, og eventuelt definere en operator<<
til SYSTEMTIME.

Noget á la
<ikke testet kode>

std::ostream operator<<(std::ostream& os, const SYSTEMTIME& st)
{
os << st.wYear << "-"
<< st.wMonth << "-"
<< st.wDay << " "
<< st.wHour << ":"
<< st.wMinute << ":"
<< st.wSecond << ":"
<< st.wMilliseconds;
return os;
}

std::string foo(const SYSTEMTIME& st)
{
std::ostringstream os;
os << st;
return os.str();
}

</ikke testet kode>

Venlig hilsen

Mogens Hansen



Glinsvad (17-11-2002)
Kommentar
Fra : Glinsvad


Dato : 17-11-02 18:20

Laver lige lidt hurtig copy/paste fra egen kodning... virker fint m. C++
Builder i Win9x.
Se MSDN for yderligere resourcer til funktionen GetDateFormat(), der
anvendes her.

//--------------------------------------------------------------------------
-
//
// GetDateString() returnerer datoen som en tekststreng ud fra det lokale
standardformat
// GetTimeString() returnerer klokken som en tekststreng ud fra 24-timers
formatet
//
// Husk at kalde delete[] <streng-variabel> for den streng der returneres
efter endt brug...
//
//--------------------------------------------------------------------------
-

char *GetDateString(SYSTEMTIME systime)
{
int nDateLength=GetDateFormat(MAKELCID(MAKELANGID(LANG_NEUTRAL,
SUBLANG_DEFAULT), SORT_DEFAULT), DATE_LONGDATE, &systime, NULL, NULL, 0);

char *szDate=new char[nDateLength+1];

if(!GetDateFormat(MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
SORT_DEFAULT), DATE_LONGDATE, &systime, NULL, (LPTSTR) szDate, nDateLength))
{
delete[] szDate;
szDate=new char[10+1];
sprintf(szDate, "%02u/%02u-%04u", systime.wDay, systime.wMonth,
systime.wYear);
}

return szDate;
}
//--------------------------------------------------------------------------
-
char *GetTimeString(SYSTEMTIME systime)
{
int nTimeLength=GetTimeFormat(MAKELCID(MAKELANGID(LANG_NEUTRAL,
SUBLANG_DEFAULT), SORT_DEFAULT), TIME_NOTIMEMARKER | TIME_FORCE24HOURFORMAT,
&systime, NULL, NULL, 0);

char *szTime=new char[nTimeLength+1];

if(!GetTimeFormat(MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
SORT_DEFAULT), TIME_NOTIMEMARKER | TIME_FORCE24HOURFORMAT, &systime, NULL,
(LPTSTR) szTime, nTimeLength))
{
delete[] szTime;
szTime=new char[8+1];
sprintf(szTime, "%02u:%02u:%02u", systime.wHour, systime.wMinute,
systime.wSecond);
}

return szTime;
}
//--------------------------------------------------------------------------
-


Glinsvad



Glinsvad (17-11-2002)
Kommentar
Fra : Glinsvad


Dato : 17-11-02 18:23

Fuld resource til GetTimeFormat på MSDN kan forresten findes på
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_5w
6s.asp

Glinsvad



Flare (19-11-2002)
Kommentar
Fra : Flare


Dato : 19-11-02 16:39

Perfect....Bedre løsning end den jeg brugte før :)

Flare



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste