CVI: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
(Created page with "The CVI function decodes a 2-byte STRING generated by MKI$ (or read from a file) to INTEGER numeric values. {{PageSyntax}} : {{Parameter|result%}} = CVI({{Parameter|stringData$}}) {{PageDescription}} * ''CV'' functions (CVD, CVS, CVI, CVL, CVDMBF, CVSMBF) are used to convert values encoded by ''MK$'' functions (MKD$, MKS$, MKI$, MKL$, MKDMBF$, MKSMBF$). * '''QB64''' has _CV and _MK$ functions...")
 
No edit summary
Line 15: Line 15:
{{PageExamples}}
{{PageExamples}}
''Example 1:''
''Example 1:''
{{CodeStart}} '' ''
{{CodeStart}}
{{Cl|FIELD}} #1, 2 {{Cl|AS}} N$, 12 {{Cl|AS}} B$...
{{Cl|FIELD}} #1, 2 {{Cl|AS}} N$, 12 {{Cl|AS}} B$...
{{Cl|GET}} #1    'GET does not need a position or variable with successive FIELD buffer reads
{{Cl|GET}} #1    'GET does not need a position or variable with successive FIELD buffer reads
Y = {{Cl|CVI}}(N$) '' ''
Y = {{Cl|CVI}}(N$)
{{CodeEnd}}
{{CodeEnd}}
:''Explanation:'' Reads a field from file #1, and converts the first two bytes (N$) into an integer number assigned to the variable Y.
:''Explanation:'' Reads a field from file #1, and converts the first two bytes (N$) into an integer number assigned to the variable Y.
Line 29: Line 29:
{{Cl|DIM}} Q {{Cl|AS}} {{Cl|STRING}} * 1
{{Cl|DIM}} Q {{Cl|AS}} {{Cl|STRING}} * 1
Q = {{Cl|CHR$}}(34)
Q = {{Cl|CHR$}}(34)
' create Print using templates to align the values returned  
' create Print using templates to align the values returned
tmp1$ = "1st character code = ### * 1  =  ### "
tmp1$ = "1st character code = ### * 1  =  ### "
tmp2$ = "2nd character code = ### * 256 = ##### "
tmp2$ = "2nd character code = ### * 256 = ##### "
Line 45: Line 45:
   asc1% = {{Cl|ASC}}(ASCII$)        ' find the ASCII code values of each character
   asc1% = {{Cl|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}}(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%
   {{Cl|LOCATE}} 19, 20: {{Cl|PRINT USING}} tmp2$; asc2%; asc2% * 256
   {{Cl|LOCATE}} 19, 20: {{Cl|PRINT USING}} tmp2$; asc2%; asc2% * 256
Line 51: Line 51:
   {{Cl|LOCATE}} 21, 20: {{Cl|PRINT USING}} tmp4$; asc1% + (256 * asc2%)
   {{Cl|LOCATE}} 21, 20: {{Cl|PRINT USING}} tmp4$; asc1% + (256 * asc2%)
{{Cl|LOOP}}
{{Cl|LOOP}}
{{Cl|SYSTEM}} '' ''
{{Cl|SYSTEM}}
{{CodeEnd}}
{{CodeEnd}}
{{small|Code by Ted Weissgerber}}
{{small|Code by Ted Weissgerber}}

Revision as of 01:20, 23 January 2023

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