Re: convert a decimal to 32 bit unsigned binary

From: Dave Allured - NOAA Affiliate <dave.allured_at_nyahnyahspammersnyahnyah>
Date: Tue Feb 19 2013 - 11:52:42 MST

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 11:52:56 2013

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