float与byte数组的相互转换,d lang V1

import tango.io.Stdout;

void ConvertFloatToBytes(float Value,inout  byte[] Bytes)
{
	uint ByteVal1, ByteVal2, ByteVal3, ByteVal4; 
	asm
	{
		mov EAX, Value;
		and EAX, 0xFF000000;
		shr EAX, 24;
		mov ByteVal1, EAX;
		mov EAX, Value;
		and EAX, 0x00FF0000;
		shr EAX, 16;
		mov ByteVal2, EAX;
		mov EAX, Value;
		and EAX, 0x0000FF00;
		shr EAX, 8;
		mov ByteVal3, EAX;
		mov EAX, Value;
		and EAX, 0x000000FF;
		mov ByteVal4, EAX;
	}
	Bytes[0] = cast(byte)ByteVal1;
	Bytes[1] = cast(byte)ByteVal2;
	Bytes[2] = cast(byte)ByteVal3;
	Bytes[3] = cast(byte)ByteVal4;
}

float  ConvertBytesToFloat(byte Bytes[4])
{
	float retfloat = 0.0;
	uint ByteVal1, ByteVal2, ByteVal3, ByteVal4;
	ByteVal1 = cast(uint)Bytes[0];
	ByteVal2 = cast(uint)Bytes[1];
	ByteVal3 = cast(uint)Bytes[2];
	ByteVal4 = cast(uint)Bytes[3];
	asm
	{
		mov EAX, ByteVal1;
		shl EAX, 24;
		mov retfloat, EAX;
		mov EAX, ByteVal2;
		shl EAX, 16;
		or EAX, retfloat;
		mov retfloat, EAX;
		mov EAX, ByteVal3;
		shl EAX, 8;
		or EAX, retfloat;
		mov retfloat, EAX;
		mov EAX, ByteVal4;
		or EAX, retfloat;
		mov retfloat, EAX;
	}
	return retfloat;
}

void main () {
	byte[] bb;
	bb.length=4;
	ConvertFloatToBytes(3.5,bb);
	
	for(int i=0;i<bb.length;i++)
	{
		Stdout(bb[i]).newline;
	}
	//结果和VB.net转换后顺序相反
	
	Stdout(ConvertBytesToFloat([64,96,0,0])).newline;
}

你可能感兴趣的:(.net,vb,VB.NET)