|
| 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 |
| | |
Flare (19-11-2002)
| Kommentar Fra : Flare |
Dato : 19-11-02 16:39 |
|
Perfect....Bedre løsning end den jeg brugte før :)
Flare
| |
|
|