Re: convert a decimal to 32 bit unsigned binary

From: cheryl Ma <xiaoyancloud_at_nyahnyahspammersnyahnyah>
Date: Wed Feb 20 2013 - 13:45:19 MST

One more question: Now suppose I have str2
=00100100000000000000000000000000,

using ncl, how to count how many days having the observations (1 means
having observations, 0 means no)?

Thanks,
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 Wed Feb 20 13:45:34 2013

This archive was generated by hypermail 2.1.8 : Thu Feb 21 2013 - 11:26:43 MST