Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Μετατροπη byte array σε hex integer

Îåêßíçóå áðü ôï ìÝëïò mixio. Τελευταία δημοσίευση από το μέλος mixio στις 18-12-2008, 00:32. Υπάρχουν 12 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-12-2008, 14:25 46946

    Μετατροπη byte array σε hex integer

    Hello again Big Smile

    Εχω μια ip address σε little endian.
    Την περναω σε ενα byte array και μετα τον κανω reverse.

    String ip = "10.4.0.2";
    byte[] myip = IPAddress.Parse(ip).GetAddressBytes();
    Array.Reverse(myip);

    Ετσι στον πινακα τωρα εχω την Ip address ως: [2, 0, 4, 10] (big endian)

    Πως μπορω να φτιαξω εναν int που να περιεχει την διευθυνση ως hex;
    Δηλαδη στο τελος να εχω εναν int με τιμη 0x0200040a .
    Δηλαδη απο byte[2,0,4,10] σε int=0x0200040a .



    Sleep-deprived psychotic hacker

  •  17-12-2008, 16:00 46947 σε απάντηση της 46946

    Απ: Μετατροπη byte array σε hex integer

    Κοίταξε λίγο την BitConverter class. Εδώ θα βρεις ένα HowTo. Για μετατροπή int σε hex μπορείς να χρησιμοποιήσεις κάποια από τις oveloaded methods της Convert class, όπως για παράδειγμα αυτή εδώ. Εναλλακτικά, μπορείς να χρησιμοποιήσεις τα standard numeric formats.
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  17-12-2008, 16:56 46948 σε απάντηση της 46946

    Απ: Μετατροπη byte array σε hex integer

    Μα, γι αυτό δεν κοίταζες νωρίτερα την IPAddress.HostToNetworkOrder ? Αυτή εγγυάται ότι θα σου δώσει τη διεύθυνση σε big-endian. Ψάχνεις κάτι άλλο?
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  17-12-2008, 18:58 46952 σε απάντηση της 46946

    Απ: Μετατροπη byte array σε hex integer

    Και για να γίνουμε και πιο συγκεκριμμένοι. Η HostToNetworkOrder μετατρέπει πάντα ένα αριθμό στην big-endian μορφή του. Οι Intel επεξεργαστές από την άλλη είναι πάντα little endian. Συνεπώς, αν για κάποιο λόγο θέλεις να επικοινωνήσεις με non-Intel σύστημα χωρίς την παρεμβολή Web Services ή άλλου συστήματος που αναλαμβάνει τη μετατροπή αυτόματα, θα πρέπει να καλέσεις την HostToNetworkOrder.

    Ο παρακάτω κώδικας παίρνει μία διεύθυνση, την μετατρέπει σε bytes και το αντίστοιχο int. Μετά, η HostToNetworkOrder σου δίνει την Big Endian μορφή. Τέλος, η Console.WriteLine γράφει και τα δύο νούμερα.

    IPAddress address = IPAddress.Parse("10.211.40.101");
    byte[] addressBytes=address.GetAddressBytes();
    int addressAsInt32 = BitConverter.ToInt32(addressBytes, 0);
    int addressAsBigEndian = IPAddress.NetworkToHostOrder(addressAsInt32);
    Console.WriteLine("{0:X8} {1:X8}", addressAsInt32, addressAsBigEndian);


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  17-12-2008, 21:08 46957 σε απάντηση της 46952

    Απ: Μετατροπη byte array σε hex integer

    int value = 123456789;
    Console.WriteLine(value.ToString("X"));
    Αυτο τυπωνει 75BCD15.

    Μαρκο εγω θελω αυτο το 75BCD15 να το περασω σε int.
    Δηλαδη int a = value.ToString("X"); Λεμε τωρα..

    Παναγιωτη εχω αυτον τον κωδικα.

    IntPtr ptun = Marshal.AllocHGlobal(12);
    Marshal.WriteInt32(ptun, 0, 0x0200040a);

    Το 0x0200040a ειναι η ip 10.4.0.2

    Το προβλημα μου ειναι οτι αναγκαζομαι να περναω την Ip στατικα στον κωδικα χωρις να μπορω να την αλλαξω.
    Θελω να την περναω δυναμικα αναλογα με την ip που δινει ο χρηστης.
    Γι'αυτο θελω να κανω αυτην την μετατροπη.
    Δηλαδη αυτο που θα δωσει ο χρηστης ως: "10.4.0.2"
    να μπει ετσι στην WriteInt32(κλαιν, μαιν, 0x0200040a)



    Sleep-deprived psychotic hacker

  •  17-12-2008, 21:35 46960 σε απάντηση της 46957

    Απ: Μετατροπη byte array σε hex integer

    mixio:


    Μαρκο εγω θελω αυτο το 75BCD15 να το περασω σε int.
    Δηλαδη int a = value.ToString("X"); Λεμε τωρα..

    Αφού είναι ήδη int, γιατί να το κάνεις string και ξανά int? Πάλι το ίδιο νούμερο θα πάρεις. Δεκαεξαδική είναι η αναπαράσταση του αριθμού, όχι ο ίδιος ο αριθμός.

    mixio:


    Το προβλημα μου ειναι οτι αναγκαζομαι να περναω την Ip στατικα στον κωδικα χωρις να μπορω να την αλλαξω.

    Γιατί δεν μπορείς να την αλλάξεις? Αφού μπορείς άνετα την μεταβλητή να την περάσεις στην WriteInt32. Νομίζω πρέπει να εξηγήσεις τί θέλεις να κάνεις γιατί δεν γίνεσαι αντιληπτός. Όχι τί νομίζεις ότι πρέπει να κάνεις, αλλά τί θέλεις να κάνεις. Ποιός χρήστης, πως δίνει τη διεύθυνση, τί θέλεις να την κάνεις?

    Αν ο χρήστης σου δίνει μία διεύθυνση ως string, μπορείς άνετα να φτιάξεις το αντίστοιχο IP addres με την Parse. Μετά, άνετα μπορείς να την μετατρέψεις είτε σε big endian είτε σε Little endian. Τί θέλεις να κάνεις τελικά? Είτε τη μία τιμή, είτε την άλλη θα την περάσεις στην WriteInt32.

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  17-12-2008, 22:33 46963 σε απάντηση της 46960

    Απ: Μετατροπη byte array σε hex integer

    Ολα αυτα τα ειπα γιατι εχω ηδη δοκιμασει τον κωδικα που μου παρεθεσες και ολα τα σχετικα Parse και δεν δουλεψε τπτ.

    Ειναι απλο αυτο που θελω να κανω.
    Δινει ο χρηστης μια ip σε μορφη string και την περναω στην WriteInt32.
    Τον int που με εδωσες εσυ δεν τον δεχτηκε.
    Χρησιμοποιω την DeviceIOControl για περασω τα δεδομενα σε ενα tunneling interface.

    Sleep-deprived psychotic hacker

  •  17-12-2008, 22:48 46964 σε απάντηση της 46963

    Απ: Μετατροπη byte array σε hex integer

    Ο int είναι int. Δεν τίθεται θέμα αν είναι σωστός ή όχι. Όταν λες ότι δεν τον δέχτηκε, ποιός δεν τον δέχτηκε? Η DeviceIOControl? Ο driver? Ο παραλήπτης στην άλλη άκρη? Επικοινωνείς σωστά με τον driver? Έχεις θέσει σωστά όλες τις παραμέτρους της DeviceIOControl? Ποιόν από τους δύο int έστειλες? Τον little endian ή τον big endian? Όταν περνάς καρφωτά τη διεύθυνση δουλεύει σωστά? Αν ναι, ποιός από τους δύο int έχει την ίδια μορφή με την διεύθυνση που δίνεις καρφωτά?

    Εδώ ισχύει κάτι σαν το "Ή στραβός είναι ο γιαλός". Το Parse και οι int είναι ΠΟΛΥ βασικές έννοιες και δεν υπάρχει περίπτωση να έχουν πρόβλημα. Εξάλλου, βλέπεις και εσύ ο ίδιος ότι δουλεύουν, στην Console.WriteLine. Για σκέψου, τί προσπαθείς να κάνεις, πες το και σε εμάς, γιατί η αλήθεια είναι ότι δεν κατάλαβα ακόμα τί κάνεις. Αναφέρεις αποσπασματικά τί κάνεις και έτσι είναι πολύ δύσκολο να σε βοηθήσει κανείς.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  17-12-2008, 22:57 46965 σε απάντηση της 46963

    Απ: Μετατροπη byte array σε hex integer

    Κάτσε, για να τα ξεκαθαρίσουμε τα πράγματα. Κι εγώ πιστεύω ότι ο Παναγιώτης Καναβός είχε δίκιο στις παρατηρήσεις του. Αν καταλαβαίνω καλά, ο χρήστης σου, σου δίνει ακέραιο σε μορφή string, αλλά στο δεκαεξαδικό σύστημα. Για τη μετατροπή μπορείς να χρησιμοποιήσεις την Parse method του int, με παράμετρο NumberStyles. Στο δεύτερο link έχει και σχετικό παράδειγμα.
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  17-12-2008, 23:31 46966 σε απάντηση της 46965

    Απ: Μετατροπη byte array σε hex integer

    Πω πω! Πολυ φασαρια Big Smile

    Λοιπον θα τα πω αλλη μια φορα.

    Αυτη η διευθυνση πρεπει να περαστει στην DeviceIOControl
    Αυτη η μεθοδος δεχεται ως ορισμα το ptun το οποιο δημιουργω ως IntPtr ptun = Marshal.AllocHGlobal(12);
    Στo ptun περναω τα δεδομενα μου που στην περιπτωση μας ειναι μια ip το network και η μασκα.

    Marshal.WriteInt32(ptun, 0, 0x0200040a);                         // 10.4.0.2 (ip)
    Marshal.WriteInt32(ptun, 4, 0x0000040a);                        // 10.4.0.0 (net)
    Marshal.WriteInt32(ptun, 8, unchecked((int)0xfcffffff));     // 255.255.255.252 (mask)

    Καλω την DeviceIOControl

    DeviceIoControl(Interface, TAP_CONTROL_CODE, ptun, 12, ptun, 12, out len, IntPtr.Zero))

    και το interface μου πηρε την διευθυνση 10.4.0.2/30

    Θελω να δινει ο χρηστης σε cmd το ονομα του προγραμματος και μια παραμετρο που ειναι η ip.
    πχ C:\myprog.exe 10.4.0.2
    Το 10.4.0.2 πρεπει να μετατραπει σε int 0x0200040a για να μπει στο πρωτο WriteInt32.

    Αυτα.
    Πανο πραγματικα δεν εχω κατι αλλο να πω. Ελπιζω να καταλαβατε.
    Ευχαριστω Κωστας.

    Sleep-deprived psychotic hacker

  •  18-12-2008, 00:02 46967 σε απάντηση της 46952

    Απ: Μετατροπη byte array σε hex integer

    Πω ρε παιδες. Εκανα μαλαγανια!
    Πανo αυτο που με εδωσες δουλευει τελικα απλα περνουσα και ως ip και ως network το 10.4.0.2 και τα windows fliparan.

    Να 'σαι καλα και 'συ. Αντε λιγο ακομη εμεινε για την πτυχιακη !!!! Big SmileBig Smile

    Sleep-deprived psychotic hacker

  •  18-12-2008, 00:29 46968 σε απάντηση της 46967

    Απ: Μετατροπη byte array σε hex integer

    Δηλαδή, τόση ώρα είχες κολλήσει στην έκφραση του συστήματος. Στην ουσία ζητούσες να μετατρέψεις τον int σε... int!!
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  18-12-2008, 00:32 46969 σε απάντηση της 46968

    Απ: Μετατροπη byte array σε hex integer

    Τι να πει κανεις..
    Οταν κολας ακομα και τα πιο απλα περιεργα σου μοιαζουν.

    Sleep-deprived psychotic hacker

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems