Thanks a lot, Dave.
This is what I want and works well.
Xiaoyan
On Tue, Feb 19, 2013 at 1:52 PM, Dave Allured - NOAA Affiliate <
dave.allured@noaa.gov> wrote:
> Xiaoyan,
>
> Okay, here is an NCL program that converts FROM a 32-bit unsigned integer,
> TO a character string of length 32.  The output should be equivalent to the
> Fortran program.
>
> begin
>   i     = 36I      ; start with 32-bit unsigned integer
>   nbits = 32       ; number of bits to display
>
>   print ("i = " + i + "   (NCL type = " + typeof (i) + ")")
>
>   str1 = ""
>   str2 = ""
>   ic   = i
>
>   do n = 1, nbits
>     bit = (ic % 2)       ; pick off the lowest bit
>     ic = ic / 2          ; shift right one bit, drop lowest
>     str1 = bit + str1
>     str2 = str2 + bit
>   end do
>
>   print ("MSB first: " + str1)
>   print ("LSB first: " + str2)
> end
>
> Output:
> (0) i = 36   (NCL type = uint)
> (0) MSB first: 00000000000000000000000000100100
> (0) LSB first: 00100100000000000000000000000000
>
> --Dave
> Please reply to list only!
>
> On Tue, Feb 19, 2013 at 10:27 AM, cheryl Ma <xiaoyancloud@gmail.com>wrote:
>
>> Thanks, Dave.
>>
>> Below is a fortran code which is provided by Andrew Mai (Thanks Andrew
>> !). cv in the code is what I want.
>>
>>       program dumpbits
>>       implicit none
>>
>>       integer :: i,ic,icv
>>       character(len=32) :: c,cv
>>
>>       i = 36
>>       print '(b32.32)',i
>>
>>       write(c,'(b32.32)') i
>>
>>       do ic=1,32
>>       icv=33-ic
>>       cv(icv:icv)=c(ic:ic)
>>       enddo
>>
>>       print '(a32)',cv
>>
>>       end
>>
>>
>>
>> On Tue, Feb 19, 2013 at 11:54 AM, Dave Allured - NOAA Affiliate <
>> dave.allured@noaa.gov> wrote:
>>
>>> Xiaoyan,
>>>
>>> Oops, my mistake.  I thought that the digits of "36" meant day numbers 3
>>> and 6.  By coincidence, it really is the encoded value of the 3rd and 6th
>>> bits, in other words 36 = 2^(3-1) + 2^(6-1).  Sorry for the confusion.
>>>
>>> Returning to your original question, use the NCL function "touint" to
>>> convert other NCL data types (numbers and strings) to NCL 32-bit unsigned
>>> binary.  The following example converts "36" as an NCL string type to data
>>> type "uint" which is NCL 32-bit unsigned binary.  Is this what you are
>>> looking for?
>>>
>>>    x = "36"          ; NCL string type
>>>    y = touint (x)
>>>    print (y)
>>>
>>>    Output:
>>>    Variable: y
>>>    Type: uint
>>>    Total Size: 4 bytes
>>>         1 values
>>>    Number of Dimensions: 1
>>>    Dimensions and sizes:   [1]
>>>    Coordinates:
>>>    (0)     36
>>>
>>> "uint" and other NCL data types are explained on this page:
>>> http://www.ncl.ucar.edu/Document/Manuals/Ref_Manual/NclDataTypes.shtml
>>>
>>> If this is not what you want, it might be helpful if you show us the
>>> Fortran code that you mentioned, so that we can understand what data
>>> structure you are trying to get.
>>>
>>> --Dave
>>> Please reply to list only!
>>>
>>> On Tue, Feb 19, 2013 at 7:26 AM, cheryl Ma <xiaoyancloud@gmail.com>wrote:
>>>
>>>> Dave,
>>>>
>>>> in this case, "36" is a decimal number. It need be converted to a
>>>> 32-bit binary number and then one can know which day having the
>>>> observation, e.g. If there is observation on the 1st day of the month, then
>>>> bit 1 would be set to true and if there is observation on the 2nd day of
>>>> the month, then bit 2 would be set to true and so on.
>>>>
>>>> We can write a fortran code to convert a decimal number to a 32-bit
>>>> binary number.  My question is if there is a function in ncl to do this?
>>>>
>>>> Thanks,
>>>> Xiaoyan
>>>>
>>>>
>>>>
>>>>
>>>> On Mon, Feb 18, 2013 at 4:01 PM, Dave Allured - NOAA Affiliate <
>>>> dave.allured@noaa.gov> wrote:
>>>>
>>>>> Xiaoyan,
>>>>>
>>>>> Be careful.  In the example you show, "36" is NOT a decimal number.
>>>>>  It looks like it is really a list of two separate integers, 3 and 6.
>>>>>
>>>>> It is good that the example image showed the graphic mapping between
>>>>> calendar days and bit positions, because the statement "Days of Month
>>>>> Observed = 36" is badly constructed and very misleading.  Maybe they should
>>>>> have said "Days of Month Observed = 3 and 6".
>>>>>
>>>>> So, what do you really want to do?  Maybe convert a LIST of calendar
>>>>> day numbers 1 to 31, to a 32-bit unsigned integer, using bit position
>>>>> encoding as shown in this example?
>>>>>
>>>>> Please reply only to the user list!
>>>>>
>>>>> --Dave
>>>>>
>>>>> On Mon, Feb 18, 2013 at 8:57 AM, cheryl Ma <xiaoyancloud@gmail.com>wrote:
>>>>>
>>>>>> Dear all,
>>>>>>
>>>>>> Is there any function in NCL to convert a decimal number to a 32-bit
>>>>>> unsigned binary? In an example shown below, 36 is a decimal, so its binary
>>>>>> is 00100100000000000000000000000000.
>>>>>>
>>>>>> Thanks,
>>>>>> Xiaoyan
>>>>>>
>>>>>> ==============================================
>>>>>> [image: Figure 3: days of month flag interpretation.]
>>>>>>
>>>>>> _______________________________________________
>>>>>> ncl-talk mailing list
>>>>>> List instructions, subscriber options, unsubscribe:
>>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>>
>>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> ncl-talk mailing list
>>>> List instructions, subscriber options, unsubscribe:
>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>
>>>>
>>>
>>
>
_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Tue Feb 19 12:24:58 2013
This archive was generated by hypermail 2.1.8 : Thu Feb 21 2013 - 11:26:43 MST