CVI: Difference between revisions
Jump to navigation
Jump to search
Code by Ted Weissgerber
Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link
(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
- 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 which can also deal with extended data types.
- INTEGER values can range from -32768 to 32767.
- Doesn't return _UNSIGNED values.
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 |
- 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