Thread overview
Pointers and offsets
Jan 14, 2015
Bauss
Jan 14, 2015
Bauss
Jan 14, 2015
Mike Parker
Jan 14, 2015
ketmar
January 14, 2015
Is it possible to access a pointer by its offsets.
Ex. write a 32bit integer to a byte pointer at ex. offset 4.

To give an example in C# you can do this:
fixed (byte* Packet = Buffer) // Buffer would be a byte array

And then to set the value of a specific offset
*((TYPE*)(Packet + OFFSET))

Where TYPE could be replaced by ex. uint and OFFSET by 4

I tried to look here:
http://dlang.org/arrays.html

But couldn't seem to find anything like it.
January 14, 2015
On Wednesday, 14 January 2015 at 01:16:54 UTC, Bauss wrote:
> Is it possible to access a pointer by its offsets.
> Ex. write a 32bit integer to a byte pointer at ex. offset 4.
>
> To give an example in C# you can do this:
> fixed (byte* Packet = Buffer) // Buffer would be a byte array
>
> And then to set the value of a specific offset
> *((TYPE*)(Packet + OFFSET))
>
> Where TYPE could be replaced by ex. uint and OFFSET by 4
>
> I tried to look here:
> http://dlang.org/arrays.html
>
> But couldn't seem to find anything like it.

Can't seem to edit OP so at:
*((TYPE*)(Packet + OFFSET))

It should be:
*((TYPE*)(Packet + OFFSET)) = VALUE;

VALUE has to be of the same type as TYPE of course.
January 14, 2015
On 1/14/2015 10:17 AM, Bauss wrote:
> On Wednesday, 14 January 2015 at 01:16:54 UTC, Bauss wrote:
>> Is it possible to access a pointer by its offsets.
>> Ex. write a 32bit integer to a byte pointer at ex. offset 4.
>>
>> To give an example in C# you can do this:
>> fixed (byte* Packet = Buffer) // Buffer would be a byte array
>>
>> And then to set the value of a specific offset
>> *((TYPE*)(Packet + OFFSET))
>>
>> Where TYPE could be replaced by ex. uint and OFFSET by 4
>>
>> I tried to look here:
>> http://dlang.org/arrays.html
>>
>> But couldn't seem to find anything like it.
>
> Can't seem to edit OP so at:

The forum is a web interface to a newsgroup, which also has a mailing list interface. So no, no editing.

> *((TYPE*)(Packet + OFFSET))
>
> It should be:
> *((TYPE*)(Packet + OFFSET)) = VALUE;
>
> VALUE has to be of the same type as TYPE of course.

void main()
{
    ubyte[16] bytes;
    for( int i=0; i<4; ++i )
    {
        *(cast( int* )( bytes.ptr + (i*4))) = i;
    }

    import std.stdio : writeln;
    writeln( cast( int[] )bytes );
}
January 14, 2015
On Wed, 14 Jan 2015 01:16:52 +0000
Bauss via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote:

> Is it possible to access a pointer by its offsets.
> Ex. write a 32bit integer to a byte pointer at ex. offset 4.
yes, it is. it's same as in c/c++, except that you have to add one magic word: `cast`. D specs has it all.