ΠΛΗΡΟΦΟΡΙΕΣ: Η συνάρτηση διαφορές μεταξύ αύξουσας/AscB/συνάρτηση AscW και Chr/ChrB/ChrW

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 145745 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Χρόνια, οι προγραμματιστές BASIC χρησιμοποιούσατε το Asc και Chr λειτουργίες για την πρόσβαση και το χειρισμό του ASCII χαρακτήρων σύνολο. Με τον ερχομό αποδοχής Unicode στην κύρια λειτουργικών συστημάτων και εφαρμογών, η ανάγκη για βελτιωμένες εκδόσεις των συναρτήσεων Asc και Chr έχει αναπτύξει. Για να ικανοποιήσετε αυτή τη ζήτηση, η Microsoft Visual Basic (4.0 και νεότερες εκδόσεις) για τα Windows περιλαμβάνει τις συναρτήσεις συνάρτηση AscW/ChrW και AscB/ChrB.

Περισσότερες πληροφορίες

Το Unicode είναι ένα πρότυπο που έχει σχεδιαστεί για να αντικαταστήσετε το πρότυπο ANSI για την κωδικοποίηση χαρακτήρων σε μια αριθμητική μορφή. Επειδή το πρότυπο ANSI χρησιμοποιεί μόνο ένα byte για την απεικόνιση κάθε χαρακτήρα, θα περιοριστεί έως 256 διαφορετικούς χαρακτήρες. Ενώ είναι επαρκείς για τις ανάγκες της αγγλικής γλώσσας ομιλίας ακροατήριο, εμπίπτει σύντομα όταν λαμβάνεται υπόψη η αγορά λογισμικού σε όλο τον κόσμο. Με το πρότυπο Unicode, κάθε χαρακτήρας αντιπροσωπεύεται από δύο byte, έτσι ώστε το ολόκληρο σύνολο χαρακτήρων Unicode περιλαμβάνει 65.536 πιθανές τοποθεσίες.

Τα Microsoft Windows NT, Microsoft Windows 2000 και Microsoft OLE 2.0 είναι εντελώς Unicode με βάση και της Visual Basic (4.0 και νεότερες εκδόσεις) αντιπροσωπεύει όλες τις συμβολοσειρές εσωτερικά σε μορφή Unicode. Οι συναρτήσεις συνάρτηση AscW και ChrW επιτρέπουν την πρόσβαση στους χαρακτήρες που είναι πλήρες εύρος Unicode. Οι συναρτήσεις αυτές λειτουργούν με τον ίδιο τρόπο όπως το αρχικό συναρτήσεις Asc και Chr εκτός του ότι υποστηρίζει ορίσματα από 0 σε 65.535 αντί απλώς από 0 έως 255. Πολλά αντικείμενα της Visual Basic (όπως το παράθυρο εντοπισμού σφαλμάτων και η ετικέτα και το πλαίσιο κειμένου) επιστρέφουν ένα "?" όταν τα αντικείμενα αυτά δεν γνωρίζετε τον τρόπο εμφάνισης ενός χαρακτήρα Unicode.

Επειδή όλες οι συμβολοσειρές αντιπροσωπεύονται τώρα εσωτερικά σε μορφή Unicode, δεν είναι τόσο απλό όπως αυτή χρησιμοποιείται για να αντιπροσωπεύουν δυαδικών δεδομένων σε μια συμβολοσειρά. Χρησιμοποιώντας τη συνάρτηση Chr για να εκχωρήσετε μια συμβολοσειρά δεδομένων δεν προκύπτει η ίδια συμπεριφορά όπως πριν. Για παράδειγμα:
   stringvar = Chr(65)
				

τα αποτελέσματα σε μια μεγάλη συμβολοσειρά δύο byte, όπου byte 1 έχει την τιμή 65 και byte 2 έχει την τιμή 0 (αυτή είναι η απεικόνιση Unicode με το γράμμα "A"). Θα πρέπει να έχετε υπόψη σας ότι η μετατροπή από ANSI σε Unicode δεν πάντα ενέχει προσθέτοντας απλώς ένα δεύτερο byte με την τιμή μηδέν, όπως συμβαίνει σε αυτήν την περίπτωση. Για παράδειγμα, οι περισσότεροι από τους κωδικούς χαρακτήρων ANSI της περιοχής 130 159 έχουν τελείως διαφορετικές τιμές Unicode. Δοκιμάστε την εκτέλεση 'Debug.Print AscW(Chr(130))' και θα εμφανίζεται η τιμή 8218.

Προς το παρόν, τα Microsoft Windows απαιτεί λίγη endian επεξεργαστή, που σημαίνει ότι σε μια οντότητα πολλών byte, το πρώτο byte είναι το λιγότερο σημαντικές και αυξάνει την σημασία σε διαδοχικά byte. Αυτό εξηγεί γιατί το χαρακτήρα Unicode "A" αναπαρίσταται εσωτερικά με τα εξής:
   -------------------
   |   65   |    0   |
   -------------------
     byte 0     byte 1
				

Οι συναρτήσεις AscB και ChrB μπορεί να χρησιμοποιηθεί για την αναπαραγωγή τι χρησιμοποιείται για να επιτευχθεί με τις συναρτήσεις Asc και Chr, επειδή αυτές οι λειτουργίες επιτρέπουν τον χειρισμό των ποσοτήτων ενός byte. Εάν θέλετε μια συμβολοσειρά τεσσάρων byte που έχει τις δυαδικές τιμές 65, 66, 67 και 68 διαδοχικά, στη συνέχεια, χρησιμοποιεί τη συνάρτηση Chr δεν θα λειτουργήσει. Αντίθετα, πρέπει να χρησιμοποιήσετε τη συνάρτηση ChrB. Για παράδειγμα:
   stringvar = ChrB(65) & ChrB(66) & ChrB(67) & ChrB(68)
				

Εναλλακτικά, μπορείτε να χρησιμοποιήσετε τη δυνατότητα να δημιουργήσετε πίνακες από τον νέο τύπο δεδομένων byte και χειρίζονται τα δυαδικά δεδομένα με αυτόν τον τρόπο.

Παρακάτω είναι μια εξήγηση των αποτελεσμάτων από μερικές απλές χρήσεις από αυτές τις συναρτήσεις για να διευκρινίσετε περαιτέρω πληροφορίες.

Εκτύπωση Asc(Chr(255))--> "255"

Nothing new here, except that the Chr function is returning a Unicode character that occupies two bytes instead of a one-byte ANSI character.

Print Asc(ChrB(255)) --> 5 - Invalid procedure call.

This usage returns an error because the Asc function always expects at least a two-byte parameter and the ChrB function is only returning a single byte.

Print Asc(Chr(256)) --> 5 - Invalid procedure call.

Although the Chr function returns a two-byte Unicode character, it still only takes numbers between 0 and 255 for its argument (note that on a DBCS enabled system, Asc/Chr handle two-byte DBCS characters, converting them to and from Unicode). Using the ChrW function allows access to the full 65,536 Unicode character locations.

Print AscW(ChrW(256)) --> "256"

This is the new version of the first statement in this section. The ChrW function takes a value from 0 to 65,536 and returns that character (on 32-bit systems). The AscW function interprets this two-byte character as a Unicode character and returns the correct Unicode value for that character.

Print Asc(ChrW(256)) --> "65"
Print Asc(ChrW(5000)) --> "63"

What is happening here is that the ChrW function is being evaluated first. ChrW(256) is the character "A", and so the function reduces to Asc("A"), and the Unicode (and ANSI) number for "A" is 65. Because Visual Basic does not know how to display the character represented by Chr(5000) it just displays a "?", and as expected, the Unicode and ANSI value for "?" is 63.

Print AscB(Chr(65)) --> "65"
Print AscB(ChrW(256)) --> "0"
Print AscB(ChrW(257)) --> "1"
Print AscB(ChrW(555)) --> "43"
Print AscB(ChrW(65535)) --> "255"

All of these return values can be explained by understanding how each character is represented internally (see the little-endian reference above) and by the fact that the AscB function looks only at the first byte of the character it receives. Visually it looks like the following diagram:
             -------------------
   Chr(65)   |   65   |    0   |
             -------------------
   Chr(256)  |    0   |    1   |
            -------------------
   Chr(257)  |    1   |    1   |
             -------------------
   Chr(555)  |   43   |    1   |
             -------------------
   Chr(65535)|   255  |  255   |
             -------------------
               byte 0    byte 1
				

The AscB function just returns whatever the first byte of the character is.

Print ChrB(65) --> ""

Visual Basic prints nothing for this call to the ChrB function because the ChrB function is only returning a one-byte string. One byte strings like this mean nothing to Visual Basic because they do not constitute a valid Unicode character (or series of characters).

Print ChrB(65) & ChrB(0) --> "A"

In this case, we are concatenating two one-byte strings into a single two-byte string. Because the resulting bit pattern is the same as the bit pattern for the Unicode "A", that is what Visual Basic prints.

Ιδιότητες

Αναγν. άρθρου: 145745 - Τελευταία αναθεώρηση: Σάββατο, 18 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
Λέξεις-κλειδιά: 
kbinfo kbmt KB145745 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:145745

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com