IDL allows you to convert data from one data type to another using a set of conversion functions. These functions are useful when you need to force the evaluation of an expression to a certain type, output data in a mode compatible with other programs, etc. For a list of type conversion functions, see Type Conversion. Conversion functions operate on data of any structure: scalars, vectors, or arrays, and variables can be of any type.
Take Care When Converting Types
If the variable you are converting lies outside the range of the type to which you are converting, IDL will truncate the binary representation of the value without informing you. For example:
A = 33000
B = FIX(A)
PRINT, B
IDL prints:
-32536
Applying FIX creates a short (16-bit) integer. If the value of the variable passed to FIX lies outside the range of 16-bit integers, IDL will silently truncate the binary value, returning only the 16 least-significant bits, with no indication that an error has occurred.
With most floating-point operations, error conditions can be monitored using the FINITE and CHECK_MATH functions.
Converting Strings
When converting from a string argument, it is possible that the string does not contain a valid number and no conversion is possible. The default action in such cases is to print a warning message and return zero. The ON_IOERROR procedure can be used to establish a statement to be jumped to in case of such errors.
Conversion between strings and byte arrays (or vice versa) is something of a special case. The result of the BYTE function applied to a string or string array is a byte array containing the ASCII codes of the characters of the string. Converting a byte array with the STRING function yields a string array or scalar with one less dimension than the byte array.
Dynamic Type Conversion
The TYPE keyword to the FIX function allows type conversion to an arbitrary type at runtime without using CASE or IF statements on each type. The following example demonstrates using the TYPE keyword:
PRO EXAMPLE_FIXTYPE
A = 3D
typeA = SIZE(A, /TYPE)
PRINT, 'A is type code', typeA
READ, UserVal, PROMPT='Enter any Numeric Value: '
ConvUserVal = FIX(UserVal, TYPE=typeA)
PRINT, ConvUserVal
END
Examples of Type Conversion
See the following table for examples of type conversions and their results.
Operation |
Results |
FLOAT(1) |
1.0 |
FIX(1.3 + 1.7) |
3 |
FIX(1.3) + FIX(1.7)
|
2 |
FIX(1.3, TYPE=5)
|
1.3000000 |
BYTE(1.2) |
1 |
BYTE(-1) |
255b (Bytes are modulo 256)
|
BYTE(’01ABC’)
|
[48b, 49b, 65b, 66b, 67b]
|
STRING([65B, 66B, 67B])
|
’ABC’ |
FLOAT(COMPLEX(1, 2))
|
1.0 |
COMPLEX([1, 2], [4, 5])
|
[COMPLEX(1,4),COMPLEX(2,5)]
|