constant 256 overflows byte

629 views
Skip to first unread message

Eric Brown

unread,
Mar 7, 2017, 7:02:59 PM3/7/17
to golang-nuts
memoryBlock := make([]byte, 4)                                                                   
binary.LittleEndian.PutUint32(memoryBlock, 12345678)

memoryBlock[2] = 256 - (187 - memoryBlock[2]) ' results in error: constant 256 overflows byte
memoryBlock[2] = 255 - (187 - memoryBlock[2]) + 1 ' results in no errors


Why is this, and what would be your suggested method of handling this?
I don't like having to do the later as it just looks sloppy.

Eric Brown

unread,
Mar 7, 2017, 7:06:00 PM3/7/17
to golang-nuts
By the way, this is code snipped from within a conditional check, so memoryBlock[2] will always be < 187 in this situation.

Ayan George

unread,
Mar 7, 2017, 7:32:26 PM3/7/17
to golan...@googlegroups.com


On 03/07/2017 07:06 PM, Eric Brown wrote:
> memoryBlock[2] = 256 - (187 - memoryBlock[2]) ' results in error:
> constant 256 overflows byte


So since you're assigning to a byte I think Go is treating all of the
constants as bytes. A byte can only encode between 0 and 255. You need
an extra bit (ie, more than a byte) to store 256. Something like the
following works but might be silly:

memoryBlock[2] = byte(int(256) - (187 - int(memoryBlock[2])))

Ayan George

unread,
Mar 7, 2017, 7:34:27 PM3/7/17
to golan...@googlegroups.com


On 03/07/2017 07:06 PM, Eric Brown wrote:
> By the way, this is code snipped from within a conditional check, so
> memoryBlock[2] will always be < 187 in this situation.
>
> On Tuesday, March 7, 2017 at 6:02:59 PM UTC-6, Eric Brown wrote:
>
> memoryBlock := make([]byte, 4)
> binary.LittleEndian.PutUint32(memoryBlock, 12345678)
>
> memoryBlock[2] = 256 - (187 - memoryBlock[2]) ' results in error:
> constant 256 overflows byte
> memoryBlock[2] = 255 - (187 - memoryBlock[2]) + 1 ' results in no
> errors
>

Sorry, I only needed to cast the variable:

memoryBlock[2] = byte(256 - (187 - int(memoryBlock[2])))

Eric Brown

unread,
Mar 7, 2017, 7:47:11 PM3/7/17
to golang-nuts
Thanks for the reply, Ayan.  I thought so too; however, I previously tried this... and it resulted in the same error.

Eric Brown

unread,
Mar 7, 2017, 7:48:08 PM3/7/17
to golang-nuts
Actually, I didn't catch the int() in your example.  I tried it, and it worked!  Thank you...

Marvin Stenger

unread,
Mar 7, 2017, 8:05:39 PM3/7/17
to golang-nuts
memoryBlock[2] += (256-187)

Paul Hankin

unread,
Mar 8, 2017, 8:59:18 AM3/8/17
to golang-nuts
Byte operations work modulo 256, so adding 256 does nothing.

Using that, you can simplify your expression to this:
memoryBlock[2] -= 187

 -- 
Paul Hankin
Reply all
Reply to author
Forward
0 new messages