Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
30.03.2003, 17:16
Retro



Moin,

ich muss mir 'ne art printf-derivat schreiben welches eine dreistellige positive Zahl in einen String packt. Die zerlegung in 1ner, 10ner und 100er ist das Hauptproblem - mir fällt im Moment garnichts dazu ein, kann mir da jemand auf die Sprünge helfen?

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
001
30.03.2003, 17:41
Onkel Dittmeyer



Was heißt müssen? Is das ne explizite Aufgabe von irgendwem oder brauchst du nur die Möglichkeit? Denn dann würde ich (sofern ich dein Vorhaben richtig verstanden hab =) itoa(...) aus der ... haut mich, glaube STDLIB.h ... nehmen ;)

--

zum Seitenanfang zum Seitenende Profil || Suche
002
30.03.2003, 17:48
Retro



Keine schlechte Idee, der Haken ist nur dass ich keine stdlib.h und somit auch kein itoa() hab :)

printf existiert zwar, erzeug aber einen zu großen Overhead, deshalb wollte ich mir da selber etwas basteln was nur diese eine Aufgabe erfüllt.

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
003
30.03.2003, 18:39
theDon



*hint* division / modulo-divison ist der schlüssel. *hint*

--

\o tanz den naziprau! o/

And more than ever, I hope to never fall,
Where enough is not the same it was before

zum Seitenanfang zum Seitenende Profil || Suche
004
30.03.2003, 20:02
Retro



Ah, danke, ich habs mal in Delphi simuliert =)

Quellcode:procedure TForm1.Button1Click(Sender: TObject);
var
  X, Y: Integer;
begin
  X := StrToInt(Edit4.Text);

  Y := X mod 100;
  X := (X - Y) div 100;

  Edit1.Text := IntToStr(X);

  X := Y mod  10;
  Y := (Y - X) div  10;

  Edit2.Text := IntToStr(Y);
  Edit3.Text := IntToStr(X);
end;

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
005
31.03.2003, 13:36
WareWolf



oder umständlicher in asm hehe, hab ich vor kurzem selbst gebraucht, deshalb. in bx steht der 5-stellige Wert

Quellcode:mov di,dezstring
         mov ax,bx
         xor dx,dx
         mov cx,10000
         div cx         ;ax=quotient dx=rest
         add ax,0x30    ;zu ASCII
         mov [di],al    ;erste Stelle beschreiben
         ;----------
         inc di
         mov ax,dx      ;Rest nehmen
         xor dx,dx
         mov cx,1000
         div cx
         add ax,0x30    ;ASCII
         mov [di],al    ;nächste Stelle beschreiben
         ;----------
         inc di
         mov ax,dx      ;Rest nehmen
         xor dx,dx
         mov cx,100
         div cx
         add ax,0x30    ;ASCII
         mov [di],al    ;nächste Stelle beschreiben
         ;----------
         inc di
         mov ax,dx      ;Rest nehmen
         xor dx,dx
         mov cx,10
         div cx
         add ax,0x30    ;ASCII
         mov [di],al    ;nächste Stelle beschreiben
         ;----------
         inc di
         mov ax,dx      ;Rest nehmen
         add ax,0x30    ;ASCII
         mov [di],al    ;nächste Stelle beschreiben
         ;----------

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
006
31.03.2003, 14:11
Snake_Shit



Sagt mal, gibts in php auch so etwas wie ein modulo divison?

--

zum Seitenanfang zum Seitenende Profil || Suche
007
31.03.2003, 15:16
[RMen]OneStone



und das ganze in ASM für Hex-Zahlen:
Quellcode:; bios_print_hex - outputs a hexadecimal number using bios interrupts
; eax - number to output
; eax, edx and bx modified and undefined
bios_print_hex:
  mov edx, eax         ; save hex number
  mov bx, 0x07         ; page 0, white color
  mov ah, 0x0E         ; teletype character

  mov al, '0'          ; output '0x'
  int 0x10             ; .
  mov al, 'x'          ; .
  int 0x10             ; .

  mov ecx, 0x08        ; we have 8 digits to output

  .1:
    mov eax, edx       ; copy number to calc register
    shr eax, 28        ; shift right 28 bits (get highest nibble [the digit] in al)

    cmp al, 0x09       ; is digit greater than 0x09?
    ja .2              ; if so, go to .2

    add al, 0x30       ; add 0x30, asci offset to '0'
    jmp .3             ; go to teletype

  .2:
    sub al, 0x0A       ; subtract 0x0A, we need only offsets from 'A'
    add al, 0x41       ; add 0x41, asci offset to 'A'

  .3:
    mov ah, 0x0E       ; teletype digit
    int 0x10           ; .

    shl edx, 4         ; get next number in highest nibble
  loop .1

  mov bx, 0x07         ; page 0, white color
  mov ah, 0x0E         ; teletype character
ret
Quellcode:<?php
  echo 13 % 10;
?>
Naja, das untere ist halt einfaches Modulo in PHP.

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/


Dieser Beitrag wurde am 31.03.2003 um 15:19 von [RMen]OneStone bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
008
31.03.2003, 15:49
Prefect



Warewolf, warum packst du das Ganze nicht in eine Schleife?

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
009
31.03.2003, 15:49
Exec



*reinhäng*
retro wollte es is c, und nich in asm ;)

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
010
31.03.2003, 16:24
Snake_Shit



Oh, danke =)

--

zum Seitenanfang zum Seitenende Profil || Suche
011
31.03.2003, 17:12
Kriz



Zitat:
Retro postete
Keine schlechte Idee, der Haken ist nur dass ich keine stdlib.h und somit auch kein itoa() hab :)

printf existiert zwar, erzeug aber einen zu großen Overhead, deshalb wollte ich mir da selber etwas basteln was nur diese eine Aufgabe erfüllt.

ROFL, willst du mir allen Ernstes erzählen, daß dein C Compiler kein stdlib.h besitzt? Nur ne Frage: Aber was zum Teufel ist das für ein C Compiler, weil stdlib.h (wie der Name ja schon andeutet) 'ne Standardheader in C ist.

:P

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
012
31.03.2003, 17:23
Zeeke



*pfeif* Ich vermute einfach mal Retro programmiert mal wieder etwas für einen Mikrocontroller-"Gebastel"-Kram, und da gibt's eben eventuell nicht alles :)

Ciao

--

zum Seitenanfang zum Seitenende Profil || Suche
013
31.03.2003, 19:53
Retro



Naja, danke für die hohe frequentierung =) Mein Problem ist in mehrfacher Hinsicht gelöst.

Also dieser verteufelte Compiler (wohl mit stdlib.h, aber ohne Funktionen wie itoa()..) ist der NC30 von Mitsubishi in einer veralteten aber dafür kostenlosen Version, und wie Zeeke schon richtig erraten hat geht es um einen Mikrocontroller.

Ich habe nun die Funktion div anhand der des GCCs abgeleitet und verwendet, es läuft einwandfrei.

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
014
31.03.2003, 21:13
Kriz



Gut, das sehe ich ein. Da kannste mal sehen, wofür OpSo gut is, wah?

=)

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
015
31.03.2003, 21:24
WareWolf



Zitat:
Prefect postete
Warewolf, warum packst du das Ganze nicht in eine Schleife?

cu,
Prefect

gute Frage, aber aus einem mir unerfindlichen Grund versuche ich möglichst alles linear zu lösen, ohne Rücksprünge (und nichts anderes sind Schleifen). Forwardjumps, ja, backwards läuft mit gegen den Strich. Ist natürlich Quatsch, aber vermutlich liegt es daran, dass ich meine Brötchen mit Maschinensteuerungen verdiene...und da wirken sich Schleifen höchst evil auf konstante Zykluszeiten aus...

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
016
01.04.2003, 12:07
CN



Zitat:
Sagt mal, gibts in php auch so etwas wie ein modulo divison?
selbstverständlich
% ist der modulo-operator

http://www.php.net/manual/en/language.operators.arithmetic.php

--

zum Seitenanfang zum Seitenende Profil || Suche
017
01.04.2003, 15:29
Snake_Shit



Jo, danke nochmal.
Hatte in self-php geguckt, aber da stand das nicht, oder ich habs übersehen.

--

zum Seitenanfang zum Seitenende Profil || Suche