CVI: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(One intermediate revision by the same user not shown)
Line 43: Line 43:
   {{Cl|_PRINTSTRING}} (152, 240), "{{Cl|MKI$}} creates 2 byte ASCII string: " + Q + ASCII$ + Q ' displays character(s)
   {{Cl|_PRINTSTRING}} (152, 240), "{{Cl|MKI$}} creates 2 byte ASCII string: " + Q + ASCII$ + Q ' displays character(s)


   asc1% = {{Cl|ASC}}(ASCII$)        ' find the ASCII code values of each character
   asc1% = {{Cl|ASC (function)|ASC}}(ASCII$)        ' find the ASCII code values of each character
   asc2% = {{Cl|ASC}}(ASCII$, 2)    ' '''QB64''' allows ASC to read specific characters in a string
   asc2% = {{Cl|ASC (function)|ASC}}(ASCII$, 2)    ' '''QB64''' allows ASC to read specific characters in a string


   {{Cl|LOCATE}} 18, 20: {{Cl|PRINT USING}} tmp1$; asc1%; asc1%
   {{Cl|LOCATE}} 18, 20: {{Cl|PRINT USING}} tmp1$; asc1%; asc1%
Line 58: Line 58:


{{PageSeeAlso}}
{{PageSeeAlso}}
* [https://qb64phoenix.com/forum/showthread.php?tid=1066 Featured in our "Keyword of the Day" series]
* [[MKD$]], [[MKI$]], [[MKS$]], [[MKL$]], [[MKDMBF$]], [[MKSMBF$]]
* [[MKD$]], [[MKI$]], [[MKS$]], [[MKL$]], [[MKDMBF$]], [[MKSMBF$]]
* [[CVS]], [[CVD]], [[CVL]], [[CVSMBF]], [[CVDMBF]]
* [[CVS]], [[CVD]], [[CVL]], [[CVSMBF]], [[CVDMBF]]

Latest revision as of 19:28, 24 May 2024

The CVI function decodes a 2-byte STRING generated by MKI$ (or read from a file) to INTEGER numeric values.


Syntax

result% = CVI(stringData$)


Description


Examples

Example 1:

FIELD #1, 2 AS N$, 12 AS B$...
GET #1     'GET does not need a position or variable with successive FIELD buffer reads
Y = CVI(N$)
Explanation: Reads a field from file #1, and converts the first two bytes (N$) into an integer number assigned to the variable Y.
Since the representation of an integer number can use up to 5 ASCII characters (five bytes), writing to a file using MKI$ conversion, and then reading back with the CVI conversion can save up to 3 bytes of storage space.


Example 2: How CVI converts the ASCII code values created by the MKI$ function.

SCREEN 12
DIM Q AS STRING * 1
Q = CHR$(34)
' create Print using templates to align the values returned
tmp1$ = "1st character code = ### * 1   =   ### "
tmp2$ = "2nd character code = ### * 256 = ##### "
tmp3$ = "                                 &  "
tmp4$ = "                     CVI Total = ##### "

DO
  COLOR 14: LOCATE 13, 20: INPUT "Enter an Integer from 1 to 32767(0 quits): ", number%
  IF number% < 1 THEN EXIT DO
  CLS
  ASCII$ = MKI$(number%)     ' create the 2 byte character string
  COLOR 11
  _PRINTSTRING (152, 240), "MKI$ creates 2 byte ASCII string: " + Q + ASCII$ + Q ' displays character(s)

  asc1% = ASC(ASCII$)        ' find the ASCII code values of each character
  asc2% = ASC(ASCII$, 2)     ' QB64 allows ASC to read specific characters in a string

  LOCATE 18, 20: PRINT USING tmp1$; asc1%; asc1%
  LOCATE 19, 20: PRINT USING tmp2$; asc2%; asc2% * 256
  LOCATE 20, 20: PRINT USING tmp3$; "-----"
  LOCATE 21, 20: PRINT USING tmp4$; asc1% + (256 * asc2%)
LOOP
SYSTEM
Code by Ted Weissgerber
Explanation: All ASCII characters can be displayed using _PRINTSTRING . The routine gets the ASCII code, which is the actual value needed by CVI. The first byte code is always between 0 and 255. The second byte can return 0 thru 127 and CVI multiplies that value by 256. This proves that you cannot just feed a string number value to CVI and get the result desired. ("90" gets decoded to 12345).


See also



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link