Plocka ut sträng i c++|Programmering / Grafisk formgivning|Forum|Nordichardware

Search
Forum Scope


Match



Forum Options



Minimum search word length is 3 characters - maximum search word length is 84 characters
Lost password?
The forums are currently locked and only available for read only access
sp_Feed sp_TopicIcon
Plocka ut sträng i c++
Yonder
Nu vet jag hur man gör inlägg!
Medlem
Forum Posts: 31
Member Since:
January 23, 2003
sp_UserOfflineSmall Offline
1
July 1, 2003 - 6:36 am
sp_Permalink sp_Print

Hej, jag ska omvandla ett värde jag läser av från en dator till en sträng. Värdet hämtar jag med olika requester från snmp-protokollet.

Om jag efter alla anrop och tilldelningar slutligen skriver:

cout << "Value = ";
SnmpUtilPrintAsnAny(&variableBindings.list[0].value);
cout << "n"; så får jag utskriften: Value = Counter - 4027505761 Nu har jag länge försökt hitta på ett sätt att spara undan värdet 4027505761 i en variabel. Det enda sättet jag lyckats på är att skriva ut svaret på en fil och sedan läsa den (med batch programmering) men det är dumt och långsamt. Hade varit bättre att lagra undan i en variabel. Jag tänkte att det kanske vore lättast att använda mig av string och konvertera dit. Sedan plocka ut värdet och konvertera till en lämplig taltyp. Hur skall jag kunna konvertera denna? variableBindings.list[0].value är en så kallad SnmpVarBind eller en AsnAny tror jag. Snälla hjälp. I värsta fall måste man ju kunna läsa det man skrivit ut på skärmen till en en sträng på något sätt?

arte
Kommer du hit ofta?
Medlem
Forum Posts: 301
Member Since:
January 7, 2003
sp_UserOfflineSmall Offline
362209
July 1, 2003 - 10:00 am
sp_Permalink sp_Print

tror att variableBindings.list[0].value är en AsnAny.

AsnAny är en struct med en byte + en union.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/snmp/snmp/asnany_str.asp

Altså, asnType innehåller vad det är för typ. Ifall du vet att det är en AsnInteger32 så är det bara att ta asnValue.

Yonder
Nu vet jag hur man gör inlägg!
Medlem
Forum Posts: 31
Member Since:
January 23, 2003
sp_UserOfflineSmall Offline
362225
July 1, 2003 - 10:22 am
sp_Permalink sp_Print

Tja, AsnAnyn jag får är ju "Counter - 4027505761". Jag har provat med flera typer, integer_32, counter_32, counter_64, octstring mm...
Jag tror inte jag förstår riktigt hur jag ska plocka ut värdet, får ett kompileringsfel liknande member identification required, men jag gör allt jag kan för att försöka förtydliga för kompilatorn vad det är.

arte
Kommer du hit ofta?
Medlem
Forum Posts: 301
Member Since:
January 7, 2003
sp_UserOfflineSmall Offline
362235
July 1, 2003 - 10:36 am
sp_Permalink sp_Print

nja, det är en debugg funktion, variableBindings.list[0].value är väl ditt värde. det handlar väl bara om att casta om den till nån användbar typ.
gör så här:

AsnAny *pAny= variableBindings.list[0].value;

switch(pAny->asnType)
{
case ASN_INTEGER: cout << "1"; break;
case ASN_INTEGER32: cout << "2"; break;
case ASN_UNSIGNED32: cout << "3"; break;
case ASN_COUNTER64: cout << "4"; break;
case ASN_OCTETSTRING: cout << "5"; break;
case ASN_BITS: cout << "6"; break;
case ASN_OBJECTIDENTIFIER: cout << "7"; break;
case ASN_SEQUENCE: cout << "8"; break;
case ASN_IPADDRESS: cout << "9"; break;
case ASN_COUNTER32: cout << "10"; break;
case ASN_GAUGE32: cout << "11"; break;
case ASN_TIMETICKS: cout << "12"; break;
case ASN_OPAQUE: cout << "13"; break; } nu vet du vad det är för typ. då är det bara att casta om skiten sedan.

Yonder
Nu vet jag hur man gör inlägg!
Medlem
Forum Posts: 31
Member Since:
January 23, 2003
sp_UserOfflineSmall Offline
362238
July 1, 2003 - 10:39 am
sp_Permalink sp_Print

Skall genast prova!
Tusen tack för koden

arte
Kommer du hit ofta?
Medlem
Forum Posts: 301
Member Since:
January 7, 2003
sp_UserOfflineSmall Offline
362241
July 1, 2003 - 10:44 am
sp_Permalink sp_Print

AsnAny *pAny= variableBindings.list[0].value;

skall nog vara

AsnAny *pAny= &variableBindings.list[0].value;

Yonder
Nu vet jag hur man gör inlägg!
Medlem
Forum Posts: 31
Member Since:
January 23, 2003
sp_UserOfflineSmall Offline
362304
July 1, 2003 - 12:16 pm
sp_Permalink sp_Print

Ok, nu fick jag reda på att det var en asn_counter32

Nu provar jag följande:

string temp = variableBindings.list[0].value.ASN_COUNTER32.String;
cout << temp; och får följande kompileringsfel Error E2280 testprog.cpp 31: Member identifier expected

arte
Kommer du hit ofta?
Medlem
Forum Posts: 301
Member Since:
January 7, 2003
sp_UserOfflineSmall Offline
362314
July 1, 2003 - 12:30 pm
sp_Permalink sp_Print

mm men det är fel.

Countern är ett 32 bitars nummer (unsigned int skulle jag tro).
Man kan skriva följjande kod på en rad om man vill.

// Casta om till ett pAny object (datahållare)
AsnAny *pAny= &variableBindings.list[0].value;

// Hämta värdet av countern och kasta till en int.
unsigned int num= pAny->asnValue.counter;

// Detta skall skriva ut 4027505761
cout << num << endl;

Yonder
Nu vet jag hur man gör inlägg!
Medlem
Forum Posts: 31
Member Since:
January 23, 2003
sp_UserOfflineSmall Offline
362318
July 1, 2003 - 12:34 pm
sp_Permalink sp_Print

Jaha, det är så det fungerar, jag har ingen erfarenhet av varken snmp eller c++, men man borde ju klara av att läsa av microsoft dokumentation..

arte
Kommer du hit ofta?
Medlem
Forum Posts: 301
Member Since:
January 7, 2003
sp_UserOfflineSmall Offline
362323
July 1, 2003 - 12:38 pm
sp_Permalink sp_Print

funkade det?

ifall du inte kan c++ så är det svårt.

Pga att man sällan använder sig av vanliga typer (int,char etc) utan oftast har classer och struktar så vet man väldigt sällan vad sakerna är.
Å andra sidan så skall man inte behöva bry sig, fast ibland så måste även den bästa OO programmeraren bry sig.

Yonder
Nu vet jag hur man gör inlägg!
Medlem
Forum Posts: 31
Member Since:
January 23, 2003
sp_UserOfflineSmall Offline
362328
July 1, 2003 - 12:44 pm
sp_Permalink sp_Print

Det fungerade utmärkt, tackar tackar
Jag har aldrig använt c++ förut, men blev tvungen att skriva ett program i c++. Jag stakar mig fram ganska okey, det är inte så olikt java, som jag har kört en del innan.

arte
Kommer du hit ofta?
Medlem
Forum Posts: 301
Member Since:
January 7, 2003
sp_UserOfflineSmall Offline
362330
July 1, 2003 - 12:48 pm
sp_Permalink sp_Print

Är du säker på att typen alltid är en Counter??

C++ är mer olikt java än man tror.

Vad gör detta programmet?

Yonder
Nu vet jag hur man gör inlägg!
Medlem
Forum Posts: 31
Member Since:
January 23, 2003
sp_UserOfflineSmall Offline
362335
July 1, 2003 - 12:55 pm
sp_Permalink sp_Print

Värdet jag hämtar är alltid en Counter, för jag läser av en räknare som räknare upp antalet bytes som kommer in och ut på en burk, tror det är en brygga. Jag ska göra ett ett program som mäter under låt säga 5 min, och sedan lagrar undan värdet knutet till en viss tid. Med datan jag får från programmet kan jag sedan jobba vidare och bygga diagram och se hur nättrafiken har rört sig under en tid.

Forum Timezone: Europe/Stockholm
Most Users Ever Online: 694
Currently Online:
Guest(s) 60
Currently Browsing this Page:
2 Guest(s)
Top Posters:
Andreas Galistel: 16287
Jonas Klar: 15897
ilg@dd: 10810
Nyhet: 10607
Mind: 10550
Ctrl: 10355
Gueno: 9881
Guest: 9344
Snorch: 8881
Callister: 8468
Newest Members:
PetrbonFU PetrbonFU
Karine Bembry
Dolores Mcdaniels
Anibal McLeish
Francisca Alt
Alfie Everhart
Lester Huitt
Orlando Jorgensen
Mikki Lundgren
Dakota Kozlowski
Forum Stats:
Groups: 11
Forums: 59
Topics: 146630
Posts: 1300967

 

Member Stats:
Guest Posters: 2
Members: 79425
Moderators: 0
Admins: 11
Administrators: nordicadmin, Henrik Berntsson, Anton Karmehed, Carl Holmberg, Joel Oscarsson, Mikael Linnér, Mikael Schwartz, Andreas Paulsson, Nickebjrk, Mattias Pettersson, EmxL