Zamiana liczby na znak ASCII
Ostatnio zmodyfikowano 2013-08-04 14:24
unimator |
» 2013-08-03 15:40:47 No autor tematu chyba domyśli się skąd ta 4 i co oznacza. Pisałem to na szybko, na tyle poprawnie aby można było zrozumieć o co chodzi a nie skopiować, wkleić i używać ;p. |
|
Berux |
» 2013-08-03 15:57:26 Można po prostu zrobić to tak: int main() { int var = 0; unsigned i; for( i = 0; i < sizeof( int ); ++i ) { *(( char * ) & var + i ) = 'a' + i; } for( i = 0; i < sizeof( int ); ++i ) { printf( "%c", *(( char * ) & var + i ) ); } printf( "\n" ); return 0; }
Wtedy będzie to uniwersalne ;). |
|
Brezniew |
» 2013-08-03 23:35:29 Zadeklaruj se #define __char__( x, i ) ((( char * )&( x ))[ i ]) do x podajesz wskaźnik do zmiennej dowolnego typu danych, a do i licząc od zera odczytujesz kolejne znaki. np. #include <cstdio>
#define __char__( x, i ) ((( char * )&( x ))[ i ])
int main() { long zmienna = 1633973089; for( int i = 0; i < 4; i++ ) printf( "%c", __char__( zmienna, i ); return 0; }
Lepiej nierób z tego żadnej funkcji bo to tylko spowolni twój kod. |
|
Mrovqa |
» 2013-08-04 09:47:41 Lepiej nierób z tego żadnej funkcji bo to tylko spowolni twój kod. |
Słyszałeś o inline? Nie wiem jak z constexpr, ale tu już raczej się nie załapie - nie testowałem :) /edit: Jednak też działa - tak jak myślałem :) W końcu adres zmiennej jest znany podczas kompilacji. http://ideone.com/gxyshE |
|
Monika90 |
» 2013-08-04 11:41:48 @up error: the value of 'a' is not usable in a constant expression note: 'int a' is not const
A po zmianie typu a na const int in constexpr expansion of 'char_(1633837924, 1)' error: '(char*)(&1633837924)' is not a constant expression
|
|
Brezniew |
» 2013-08-04 12:18:29 Z żebyś nie robił z tego funkcji to miałem na myśli z tej jednej linijki ale możesz zrobić tak: #include <iostream>
#define __char__( x, i ) ((( char * )( x ))[ i ])
void funkcja( void * ptr, size_t size ) { int i; for( i = 0; i < size; i++ ) std::cout << __char__( ptr, i ); }
int main() { long zmienna; std::cin >> zmienna; funkcja( & zmienna, sizeof( long ) ); return 0; }
I wtedy nie musisz na sztywno ustalać zmiennej przy kompilacji oraz ilości znaków. |
|
pekfos |
» 2013-08-04 12:21:28 Nazwy zawierające podwójne podkreślenie są zarezerwowane. W końcu adres zmiennej jest znany podczas kompilacji. |
Nie jest znany. |
|
Mrovqa |
» 2013-08-04 12:43:31 No właśnie zastanawiałem się co z ALSR, bo to się kompilowało... |
|
1 « 2 » 3 |