Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 24 additions & 12 deletions BitConverter.sln
Original file line number Diff line number Diff line change
@@ -1,28 +1,40 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26228.4
# Visual Studio Version 16
VisualStudioVersion = 16.0.30104.148
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EndianBitConverter", "EndianBitConverter\EndianBitConverter.csproj", "{848519BA-2143-4B62-92B4-A93425CE8A19}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EndianBitConverter", "EndianBitConverter\EndianBitConverter.csproj", "{ABC12A77-84A8-4079-995A-E72FE047CC96}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EndianBitConverter.Tests", "EndianBitConverter.Tests\EndianBitConverter.Tests.csproj", "{8D662449-7772-4CD2-9444-C073B6FE1F90}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EndianBitConverter.Tests", "EndianBitConverter.Tests\EndianBitConverter.Tests.csproj", "{C56FC316-F02D-4C0D-B588-CAA4132CF360}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_solution files", "_solution files", "{C7D9E938-1285-4249-B43F-7D1F4DEA9FA1}"
ProjectSection(SolutionItems) = preProject
.gitattributes = .gitattributes
.gitignore = .gitignore
EndianBitConverter.png = EndianBitConverter.png
LICENSE.txt = LICENSE.txt
README.md = README.md
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{848519BA-2143-4B62-92B4-A93425CE8A19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{848519BA-2143-4B62-92B4-A93425CE8A19}.Debug|Any CPU.Build.0 = Debug|Any CPU
{848519BA-2143-4B62-92B4-A93425CE8A19}.Release|Any CPU.ActiveCfg = Release|Any CPU
{848519BA-2143-4B62-92B4-A93425CE8A19}.Release|Any CPU.Build.0 = Release|Any CPU
{8D662449-7772-4CD2-9444-C073B6FE1F90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8D662449-7772-4CD2-9444-C073B6FE1F90}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8D662449-7772-4CD2-9444-C073B6FE1F90}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8D662449-7772-4CD2-9444-C073B6FE1F90}.Release|Any CPU.Build.0 = Release|Any CPU
{ABC12A77-84A8-4079-995A-E72FE047CC96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ABC12A77-84A8-4079-995A-E72FE047CC96}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ABC12A77-84A8-4079-995A-E72FE047CC96}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ABC12A77-84A8-4079-995A-E72FE047CC96}.Release|Any CPU.Build.0 = Release|Any CPU
{C56FC316-F02D-4C0D-B588-CAA4132CF360}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C56FC316-F02D-4C0D-B588-CAA4132CF360}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C56FC316-F02D-4C0D-B588-CAA4132CF360}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C56FC316-F02D-4C0D-B588-CAA4132CF360}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {5ECCA5D4-B184-46AC-A898-61EAE3F91B47}
EndGlobalSection
EndGlobal
29 changes: 13 additions & 16 deletions EndianBitConverter.Tests/EndianBitConverter.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net45;netcoreapp1.0</TargetFrameworks>
<Optimize>False</Optimize>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.1.11" />
<PackageReference Include="MSTest.TestFramework" Version="1.1.11" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="MSTest.TestAdapter" Version="2.1.0" />
<PackageReference Include="MSTest.TestFramework" Version="2.1.0" />
<PackageReference Include="coverlet.collector" Version="1.2.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\EndianBitConverter\EndianBitConverter.csproj" />
</ItemGroup>

<ItemGroup>
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\EndianBitConverter\EndianBitConverter.csproj" />
</ItemGroup>

</Project>
2 changes: 1 addition & 1 deletion EndianBitConverter.Tests/GetBytesTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Copyright (C) Microsoft Corporation. All rights reserved.

namespace BitConverter.Tests
namespace EndianBitConverter.Tests
{
using System;
using System.Linq;
Expand Down
2 changes: 1 addition & 1 deletion EndianBitConverter.Tests/GetValueTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Copyright (C) Microsoft Corporation. All rights reserved.

namespace BitConverter.Tests
namespace EndianBitConverter.Tests
{
using System;
using System.Linq;
Expand Down
15 changes: 14 additions & 1 deletion EndianBitConverter.Tests/InterfaceTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Copyright (C) Microsoft Corporation. All rights reserved.

namespace BitConverter.Tests
namespace EndianBitConverter.Tests
{
using System.Reflection;
using Microsoft.VisualStudio.TestTools.UnitTesting;
Expand All @@ -11,8 +11,21 @@ public class InterfaceTests
[TestMethod]
public void IsLittleEndian()
{
//big-endian
Assert.IsFalse(EndianBitConverter.BigEndian.IsLittleEndian);
Assert.IsFalse(EndianBitConverter.BigEndian.IsMid);

//mid big-endian
Assert.IsFalse(EndianBitConverter.MidBigEndian.IsLittleEndian);
Assert.IsTrue(EndianBitConverter.MidBigEndian.IsMid);

//little-endian
Assert.IsTrue(EndianBitConverter.LittleEndian.IsLittleEndian);
Assert.IsFalse(EndianBitConverter.LittleEndian.IsMid);

//mid little-endian
Assert.IsTrue(EndianBitConverter.MidLittleEndian.IsLittleEndian);
Assert.IsTrue(EndianBitConverter.MidLittleEndian.IsMid);
}
}
}
20 changes: 20 additions & 0 deletions EndianBitConverter.Tests/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

[assembly: AssemblyTitle("EndianBitConverter.Tests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("EndianBitConverter.Tests")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

[assembly: ComVisible(false)]

[assembly: Guid("12c7685a-9cba-4fd2-9679-6360fa7daed5")]

// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
4 changes: 2 additions & 2 deletions EndianBitConverter/BigEndianBitConverter.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Copyright (C) Microsoft Corporation. All rights reserved.

namespace BitConverter
namespace EndianBitConverter
{
/// <summary>
/// A big-endian BitConverter that converts base data types to an array of bytes, and an array of bytes to base data types. All conversions are in
Expand All @@ -12,7 +12,7 @@ internal class BigEndianBitConverter : EndianBitConverter
internal BigEndianBitConverter() { }

public override bool IsLittleEndian { get; } = false;

public override bool IsMid { get; } = false;
public override byte[] GetBytes(short value)
{
return new byte[] { (byte)(value >> 8), (byte)value };
Expand Down
20 changes: 19 additions & 1 deletion EndianBitConverter/EndianBitConverter.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Copyright (C) Microsoft Corporation. All rights reserved.

namespace BitConverter
namespace EndianBitConverter
{
using System;
using System.Runtime.CompilerServices;
Expand All @@ -22,17 +22,35 @@ public abstract class EndianBitConverter
/// </summary>
public static EndianBitConverter LittleEndian { get; } = new LittleEndianBitConverter();

/// <summary>
/// Get an instance of a <see cref="MidLittleEndianBitConverter"/>, a BitConverter which performs all conversions in mid little-endian format regardless of
/// machine architecture.
/// </summary>
public static EndianBitConverter MidLittleEndian { get; } = new MidLittleEndianBitConverter();

/// <summary>
/// Get an instance of a <see cref="BigEndianBitConverter"/>, a BitConverter which performs all conversions in big-endian format regardless of
/// machine architecture.
/// </summary>
public static EndianBitConverter BigEndian { get; } = new BigEndianBitConverter();

/// <summary>
/// Get an instance of a <see cref="MidBigEndianBitConverter"/>, a BitConverter which performs all conversions in mid big-endian format regardless of
/// machine architecture.
/// </summary>
public static EndianBitConverter MidBigEndian { get; } = new MidBigEndianBitConverter();

/// <summary>
/// Indicates the byte order ("endianness") in which data should be converted.
/// </summary>
public abstract bool IsLittleEndian { get; }

/// <summary>
/// Indicates if the bytes should be converted from mid.
/// </summary>
public abstract bool IsMid { get; }


/// <summary>
/// Returns the specified Boolean value as a byte array.
/// </summary>
Expand Down
36 changes: 16 additions & 20 deletions EndianBitConverter/EndianBitConverter.csproj
Original file line number Diff line number Diff line change
@@ -1,23 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net45;net40;netcoreapp1.0;netstandard1.0</TargetFrameworks>
<Optimize Condition="'$(Configuration)'=='Release'">True</Optimize>
<Version>1.1.0.0</Version>
<DocumentationFile>bin\$(Configuration)\$(TargetFramework)\$(MSBuildProjectName).xml</DocumentationFile>
<Company>Microsoft Corporation</Company>
<Copyright>© Microsoft Corporation. All rights reserved.</Copyright>
<Authors>David Reaburn</Authors>
<PackageTags>Endian BigEndian LittleEndian BitConverter</PackageTags>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<Description>Provides a big-endian and little-endian BitConverter that convert base data types to an array of bytes, and an array of bytes to base data types, regardless of machine architecture.</Description>
<PackageLicenseUrl>https://raw.githubusercontent.com/davidrea-MS/BitConverter/master/LICENSE.txt</PackageLicenseUrl>
<RepositoryUrl>https://github.com/davidrea-MS/BitConverter</RepositoryUrl>
<PackageIconUrl>https://raw.githubusercontent.com/davidrea-MS/BitConverter/master/EndianBitConverter.png</PackageIconUrl>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyVersion>3.1.0.0</AssemblyVersion>
<FileVersion>3.1.0.0</FileVersion>
<Version>3.1.0</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>David Reaburn, Chris Leclair</Authors>
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
<PackageProjectUrl>https://github.com/XCVG/BitConverter</PackageProjectUrl>
<PackageIcon>EndianBitConverter.png</PackageIcon>
<RepositoryUrl>https://github.com/ovidiaconescu/BitConverter</RepositoryUrl>
<Copyright>© Microsoft Corporation, Chris Leclair, Ovidiu Diaconescu. All rights reserved.</Copyright>
<Company>Microsoft Corporation, XCVG Systems, Ovidiu Diaconescu</Company>
<Description>Provides a big-endian, little-endian mid big-endian, mid little-endian BitConverter that convert base data types to an array of bytes, and an array of bytes to base data types, regardless of machine architecture. This is a third-party fork of the original project with the project cleaned up slightly and updated to .NET Standard 2.0.</Description>
<PackageTags>Endian BigEndian LittleEndian MidBigEndian MidLittleEndian BitConverter</PackageTags>
</PropertyGroup>

<ItemGroup>
<Content Include="LICENSE.EndianBitConverter.txt" />
</ItemGroup>

</Project>
</Project>
10 changes: 0 additions & 10 deletions EndianBitConverter/LICENSE.EndianBitConverter.txt

This file was deleted.

4 changes: 2 additions & 2 deletions EndianBitConverter/LittleEndianBitConverter.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Copyright (C) Microsoft Corporation. All rights reserved.

namespace BitConverter
namespace EndianBitConverter
{
/// <summary>
/// A little-endian BitConverter that converts base data types to an array of bytes, and an array of bytes to base data types. All conversions are in
Expand All @@ -12,7 +12,7 @@ internal class LittleEndianBitConverter : EndianBitConverter
internal LittleEndianBitConverter() { }

public override bool IsLittleEndian { get; } = true;

public override bool IsMid { get; } = false;
public override byte[] GetBytes(short value)
{
return new byte[] { (byte)value, (byte)(value >> 8) };
Expand Down
59 changes: 59 additions & 0 deletions EndianBitConverter/MidBigEndianBitConverter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// Copyright (C) Microsoft Corporation. All rights reserved.

namespace EndianBitConverter
{
/// <summary>
/// A mid big-endian BitConverter that converts base data types to an array of bytes, and an array of bytes to base data types.
/// All conversions are in mid big-endian format regardless of machine architecture.
/// </summary>
internal class MidBigEndianBitConverter : EndianBitConverter
{
// Instance available from EndianBitConverter.BigEndian
internal MidBigEndianBitConverter() { }

public override bool IsLittleEndian { get; } = false;
public override bool IsMid { get; } = true;


public override byte[] GetBytes(short value)
{
return new byte[] { (byte)(value >> 8), (byte)value };
}

public override byte[] GetBytes(int value)
{
return new byte[] { (byte)(value >> 16), (byte)(value >> 24), (byte)value, (byte)(value >> 8) };
}

public override byte[] GetBytes(long value)
{
return new byte[] {
(byte)(value >> 48), (byte)(value >> 56), (byte)(value >> 32), (byte)(value >> 40),
(byte)(value >> 16), (byte)(value >> 24), (byte)value, (byte)(value >> 8)
};
}

public override short ToInt16(byte[] value, int startIndex)
{
this.CheckArguments(value, startIndex, sizeof(short));

return (short)((value[startIndex] << 8) | (value[startIndex + 1]));
}

public override int ToInt32(byte[] value, int startIndex)
{
this.CheckArguments(value, startIndex, sizeof(int));

return (value[startIndex] << 16) | (value[startIndex + 1] << 24) | (value[startIndex + 2]) | (value[startIndex + 3] << 8);
}

public override long ToInt64(byte[] value, int startIndex)
{
this.CheckArguments(value, startIndex, sizeof(long));

int highBytes = (value[startIndex] << 16) | (value[startIndex + 1] << 24) | (value[startIndex + 2]) | (value[startIndex + 3] << 8);
int lowBytes = (value[startIndex + 4] << 16) | (value[startIndex + 5] << 24) | (value[startIndex + 6]) | (value[startIndex + 7] << 8);
return ((uint)lowBytes | ((long)highBytes << 32));
}
}
}
Loading