Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 06:13

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



C atoi/srand/rand to C++

Discussion on C atoi/srand/rand to C++ within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,537
C atoi/srand/rand to C++

Code:
#include <iostream>
#include <Windows.h>
#include <time.h>
#include <sstream>
struct PlayerStr
{
	int Health;
	int Damage;
	int UID;
	int Honor;
	std::string Look;
	int Gender;
	int Race;
	int Class;
	std::string Name;
	int Level;
	int MinimalDamage;
	int MaximalDamage;
	int MainAttribute;
};PlayerStr Player;
struct EnemyStr
{
	int Health;
	int Damage;
	int UID;
	int Honor;
	std::string Look;
	int Gender;
	int Race;
	int Class;
	std::string Name;
	int Level;
	int MinimalDamage;
	int MaximalDamage;
	int MainAttribute;
};EnemyStr Enemy;
int main(int args,char *argv[])
{
	std::string FinalPacket = argv[1];
	Player.Health		 = atoi(argv[2]);
	Enemy.Health		 = atoi(argv[3]);
	Player.Damage		 = atoi(argv[4]);
	Enemy.Damage		 = atoi(argv[5]);
	Player.UID			 = atoi(argv[6]);
	Player.Honor		 = atoi(argv[7]);
	Enemy.UID			 = atoi(argv[8]);
	Enemy.Honor			 = atoi(argv[9]);
	Player.Look			 = argv[10];
	Player.Gender		 = atoi(argv[11]);
	Player.Class		 = atoi(argv[12]);
	Player.Race			 = atoi(argv[13]);
	Player.Name			 = argv[14];
	Enemy.Look			 = argv[15];
	Enemy.Gender		 = atoi(argv[16]);
	Enemy.Race			 = atoi(argv[17]);
	Enemy.Class			 = atoi(argv[18]);
	Enemy.Name			 = argv[19];
	Player.Level		 = atoi(argv[20]);
	Enemy.Level			 = atoi(argv[21]);
	Player.MinimalDamage = atoi(argv[22]);
	Player.MaximalDamage = atoi(argv[23]);
	Enemy.MinimalDamage  = atoi(argv[24]);
	Enemy.MaximalDamage  = atoi(argv[25]);
	Player.MainAttribute = atoi(argv[26]);
	Enemy.MainAttribute  = atoi(argv[27]);
	std::stringstream s;
	s << FinalPacket;
        int luckone = 0;
                        Sleep(500); // Damit der rand wert auch unterschiedlich ist
			srand ( static_cast<unsigned int >(time(NULL)) );
			luckone = rand() % (5 + 1);
}
Gibt es in C++ eine bessere alternative als atoi?
und alternativen zu srand / rand wären auch gut zu wissen
bloodx is offline  
Old 11/06/2012, 14:27   #2
 
elite*gold: 0
Join Date: Oct 2011
Posts: 814
Received Thanks: 675
Soweit ich weiß, gibt es keine direkte alternative zu atoi.
Aber in C++ lässt sich das ganze per std::stringstream lösen.

Code:
int ConvertToInt(std::string s)
{
	int convert;
	std::stringstream ss(s)
	ss >> convert;
	return convert;
}
Edit: Bezüglich einer srand/rand C++ alternative schau mal in die Boost Library.
Trollface- is offline  
Old 11/06/2012, 15:27   #3
 
Farmär's Avatar
 
elite*gold: 0
Join Date: Oct 2012
Posts: 8
Received Thanks: 5
Nur eine eigene funktion, eine random funktion könntest du hinbekommen mit einem Algorithmus. Eine funktion für atoi ist nicht nötig, da diese funktion schon die kürzeste version ist die man benutzen kann.
Farmär is offline  
Old 11/06/2012, 19:16   #4




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,537
@Trollface Danke für die Antwort dass mit std::stringstream wusste auch leider schon, dachte nur da gibt es noch eine andre Möglichkeit .

hm boost library muss ich mir nochmal downloaden dann wohl :P

@Farmär das kürzeste ist aber nicht immer das beste! Was ich dort geschrieben habe ist für ein Online Spiel d.h muss es GENAU und SCHNELL sein .

und rand funktionert halt nunmal nur mit blöden Sleeps ~.~
bloodx is offline  
Old 11/07/2012, 14:00   #5
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by bloodx View Post
@Trollface Danke für die Antwort dass mit std::stringstream wusste auch leider schon, dachte nur da gibt es noch eine andre Möglichkeit .

hm boost library muss ich mir nochmal downloaden dann wohl :P

@Farmär das kürzeste ist aber nicht immer das beste! Was ich dort geschrieben habe ist für ein Online Spiel d.h muss es GENAU und SCHNELL sein .

und rand funktionert halt nunmal nur mit blöden Sleeps ~.~
eine andere möglichkeit zu std::stringstream wäre speziell für diesen fall boost::lexical_cast (wenn du dir die lib sowieso saugst)
Tyrar is offline  
Old 11/07/2012, 14:50   #6




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,537
Darüber habe ich auch schon etwas gelesen danke dir


jetzt bräuchte ich nur ne alternative für rand() halt weil Sleeps sind ja total doof!
bloodx is offline  
Old 11/07/2012, 15:28   #7
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
Quote:
Originally Posted by bloodx View Post
Darüber habe ich auch schon etwas gelesen danke dir


jetzt bräuchte ich nur ne alternative für rand() halt weil Sleeps sind ja total doof!
du benutzt rand nur falsch.
du musst einmal srand, also den seed mit time(NULL) initialisieren.
danach rufst du immer nur noch rand auf.
wenn du jedes mal srand aufrufst, wird der seed wieder neu gesetzt (ändert sich bei time(NULL) einmal pro sekunde), und die rand abfolge fängt wieder von vorne an.
Dr. Coxxy is offline  
Thanks
1 User
Old 11/07/2012, 16:24   #8
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by Dr. Coxxy View Post
du benutzt rand nur falsch.
du musst einmal srand, also den seed mit time(NULL) initialisieren.
danach rufst du immer nur noch rand auf.
wenn du jedes mal srand aufrufst, wird der seed wieder neu gesetzt (ändert sich bei time(NULL) einmal pro sekunde), und die rand abfolge fängt wieder von vorne an.
example:
Code:
srand(time(nullptr));

for(uint32_t i = 0; i < 10; ++i)
    std::cout << rand()%101 << "%" << std::endl;
würde z.b. das ausgeben:
Code:
45%
13%
10%
84%
0%
99%
32%
29%
9%
70%
Tyrar is offline  
Thanks
1 User
Old 11/08/2012, 02:08   #9




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,537
oh weia dat tut weh -.- Danke euch !
bloodx is offline  
Old 11/08/2012, 10:09   #10


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Für C: strtol ist atoi afaik sogar vorzuziehen.

Warum genau schreibst du in deiner Schleife % (5+1)?
Schreib doch gleich % 6.
Ich vermute mal, du willst eine Zahl zwischen 1 und 6 haben. Das macht man so:

Code:
 
int i = rand()  % 5 + 1;
Btw. wieso sollte man für unterschiedliche Zahlen Sleep brauchen? Ist die Zeit API nicht eigentlich genau genug, dass in den zwei Durchgängen unterschiedliche Timestamps und damit auch Seeds rauskommen, was trotzdem zu einer anderen Zahl am Anfang führen müsste?
MrSm!th is offline  
Old 11/08/2012, 11:44   #11
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by MrSm!th View Post
Für C: strtol ist atoi afaik sogar vorzuziehen.

Warum genau schreibst du in deiner Schleife % (5+1)?
Schreib doch gleich % 6.
Ich vermute mal, du willst eine Zahl zwischen 1 und 6 haben. Das macht man so:

Code:
 
int i = rand()  % 5 + 1;
Btw. wieso sollte man für unterschiedliche Zahlen Sleep brauchen? Ist die Zeit API nicht eigentlich genau genug, dass in den zwei Durchgängen unterschiedliche Timestamps und damit auch Seeds rauskommen, was trotzdem zu einer anderen Zahl am Anfang führen müsste?
timestamps liefern nur sekunden (was ich daraus schliesse, dass die sich auch nur jede sekunde ändern)

in c++ würde ich jedenfalls zu chrono greifen
Tyrar is offline  
Thanks
1 User
Old 11/08/2012, 15:55   #12


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Ok dachte eigentlich die liefern Millisekunden.
Naja gut, mal rein theoretisch gedacht sollte es dann aber mit dem Tick Counter der CPU oder der Millisekunden genauen System Uhr gehen :P (kann sein, dass ich mich da irre, aber ich meine sogar eine Api Funktion mit Nanosekunden Genauigkeit gesehen zu haben)
MrSm!th is offline  
Old 11/08/2012, 16:01   #13
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
Quote:
Originally Posted by MrSm!th View Post
Ok dachte eigentlich die liefern Millisekunden.
Naja gut, mal rein theoretisch gedacht sollte es dann aber mit dem Tick Counter der CPU oder der Millisekunden genauen System Uhr gehen :P (kann sein, dass ich mich da irre, aber ich meine sogar eine Api Funktion mit Nanosekunden Genauigkeit gesehen zu haben)
Dr. Coxxy is offline  
Old 11/08/2012, 17:29   #14
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by Dr. Coxxy View Post
das wäre eine option, allerdings muss man da auch die frequenz des prozessors beachten!

zusätzlich wäre die reine c++ variante cross platform!

kleines sample, sieht dem original sehr ähnlich (is übrigens nur auf die schnelle geschrieben) ()
Tyrar is offline  
Old 11/08/2012, 17:37   #15
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
Quote:
Originally Posted by HeavyHacker View Post
Code:
std::chrono::high_resolution_clock::time_point timeBegin;
std::chrono::high_resolution_clock::time_point timeEnd;
std::chrono::duration<double> timeValue;

timeBegin = std::chrono::high_resolution_clock::now();

for(uint32_t i = 0; i < 10; ++i)
    std::cout << "FAP ";

timeEnd = std::chrono::high_resolution_clock::now();
timeValue = std::chrono::duration_cast<std::chrono::duration<double> >(timeEnd-timeBegin);

std::cout << std::endl << "Fapped " << timeValue << " seconds!" << std::endl;
iih also wirklich, doch nicht hier öffentlich im forum ^^

Die frequenz ist unerheblich, da das ganze ja nur als srand init value benutzt werden sollte.

Wenn man nen timer machen will, muss man natürlich die frequenz beachten.
Dr. Coxxy is offline  
Reply


Similar Threads Similar Threads
[CF]Vollbild mit rand
07/15/2012 - CrossFire - 8 Replies
Hey leute, ich habe nun wieder ein neues problem und zwar habe ich bei 1680x1050 immer schwarze ränder auch wenn ich es so aufem desktop einstelle hoffe ihr könnt mir helfen. Mfg tunertotal
Rand abrunden
04/17/2011 - General Art - 12 Replies
Hallo. Ich habe Photoshop Cs5. Ich will grad bei ner Signatur die kanten abrunden. Kann mir einer erklären wie das geht? In google hab ich zwar erklärungen gefunden, diese waren aber zu schwer. Hoffe das kann mir jemand leicht erklären. Danke.
Schwarzer Rand in 1.6
04/13/2011 - Counter-Strike - 5 Replies
Hey, habe mir gestern 1.6 auf meinen Laptop geladen & auch gleich gestartet. Nur wenn ich Ingame bin habe ich links & rechts einen schwarzen Rand. Ein Kumpel meinte dieser nennt sich "schwedischer Rand" weiß jemand wie ich diesen weg bekomme?
Rand Hack
06/19/2010 - World of Warcraft - 2 Replies
Salut Je cherche un hack pour faire de magnifique randown pour drop des objet voillaaa merci de me laisser de reponse
3D Rand
03/13/2006 - General Art - 3 Replies
Damit ich meine diesen Rand hier: http://mitglied.lycos.de/gehtsnochoderwas/ps/Xant us2.png Hier arbeite ich gerne mit Grid Showing http://mitglied.lycos.de/gehtsnochoderwas/tut/ran d/1.jpg Neuen Layer erstellen und los gehts.



All times are GMT +2. The time now is 06:13.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.