Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / clr / src / BCL / System / Security / Util / Hex.cs / 1 / Hex.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /* * Hex.cs * * Operations to convert to and from Hex * */ namespace System.Security.Util { using System; using System.Security; internal static class Hex { // converts number to hex digit. Does not do any range checks. static char HexDigit(int num) { return (char)((num < 10) ? (num + '0') : (num + ('A' - 10))); } public static String EncodeHexString(byte[] sArray) { String result = null; if(sArray != null) { char[] hexOrder = new char[sArray.Length * 2]; int digit; for(int i = 0, j = 0; i < sArray.Length; i++) { digit = (int)((sArray[i] & 0xf0) >> 4); hexOrder[j++] = HexDigit(digit); digit = (int)(sArray[i] & 0x0f); hexOrder[j++] = HexDigit(digit); } result = new String(hexOrder); } return result; } internal static string EncodeHexStringFromInt(byte[] sArray) { String result = null; if(sArray != null) { char[] hexOrder = new char[sArray.Length * 2]; int i = sArray.Length; int digit, j=0; while (i-- > 0) { digit = (sArray[i] & 0xf0) >> 4; hexOrder[j++] = HexDigit(digit); digit = sArray[i] & 0x0f; hexOrder[j++] = HexDigit(digit); } result = new String(hexOrder); } return result; } public static int ConvertHexDigit(Char val) { if (val <= '9' && val >= '0') return (val - '0'); else if (val >= 'a' && val <= 'f') return ((val - 'a') + 10); else if (val >= 'A' && val <= 'F') return ((val - 'A') + 10); else throw new ArgumentException( Environment.GetResourceString( "ArgumentOutOfRange_Index" ) ); } public static byte[] DecodeHexString(String hexString) { if (hexString == null) throw new ArgumentNullException( "hexString" ); bool spaceSkippingMode = false; int i = 0; int length = hexString.Length; if ((length >= 2) && (hexString[0] == '0') && ( (hexString[1] == 'x') || (hexString[1] == 'X') )) { length = hexString.Length - 2; i = 2; } // Hex strings must always have 2N or (3N - 1) entries. if (length % 2 != 0 && length % 3 != 2) { throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidHexFormat" ) ); } byte[] sArray; if (length >=3 && hexString[i + 2] == ' ') { spaceSkippingMode = true; // Each hex digit will take three spaces, except the first (hence the plus 1). sArray = new byte[length / 3 + 1]; } else { // Each hex digit will take two spaces sArray = new byte[length / 2]; } int digit; int rawdigit; for (int j = 0; i < hexString.Length; i += 2, j++) { rawdigit = ConvertHexDigit(hexString[i]); digit = ConvertHexDigit(hexString[i+1]); sArray[j] = (byte) (digit | (rawdigit << 4)); if (spaceSkippingMode) i++; } return(sArray); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /* * Hex.cs * * Operations to convert to and from Hex * */ namespace System.Security.Util { using System; using System.Security; internal static class Hex { // converts number to hex digit. Does not do any range checks. static char HexDigit(int num) { return (char)((num < 10) ? (num + '0') : (num + ('A' - 10))); } public static String EncodeHexString(byte[] sArray) { String result = null; if(sArray != null) { char[] hexOrder = new char[sArray.Length * 2]; int digit; for(int i = 0, j = 0; i < sArray.Length; i++) { digit = (int)((sArray[i] & 0xf0) >> 4); hexOrder[j++] = HexDigit(digit); digit = (int)(sArray[i] & 0x0f); hexOrder[j++] = HexDigit(digit); } result = new String(hexOrder); } return result; } internal static string EncodeHexStringFromInt(byte[] sArray) { String result = null; if(sArray != null) { char[] hexOrder = new char[sArray.Length * 2]; int i = sArray.Length; int digit, j=0; while (i-- > 0) { digit = (sArray[i] & 0xf0) >> 4; hexOrder[j++] = HexDigit(digit); digit = sArray[i] & 0x0f; hexOrder[j++] = HexDigit(digit); } result = new String(hexOrder); } return result; } public static int ConvertHexDigit(Char val) { if (val <= '9' && val >= '0') return (val - '0'); else if (val >= 'a' && val <= 'f') return ((val - 'a') + 10); else if (val >= 'A' && val <= 'F') return ((val - 'A') + 10); else throw new ArgumentException( Environment.GetResourceString( "ArgumentOutOfRange_Index" ) ); } public static byte[] DecodeHexString(String hexString) { if (hexString == null) throw new ArgumentNullException( "hexString" ); bool spaceSkippingMode = false; int i = 0; int length = hexString.Length; if ((length >= 2) && (hexString[0] == '0') && ( (hexString[1] == 'x') || (hexString[1] == 'X') )) { length = hexString.Length - 2; i = 2; } // Hex strings must always have 2N or (3N - 1) entries. if (length % 2 != 0 && length % 3 != 2) { throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidHexFormat" ) ); } byte[] sArray; if (length >=3 && hexString[i + 2] == ' ') { spaceSkippingMode = true; // Each hex digit will take three spaces, except the first (hence the plus 1). sArray = new byte[length / 3 + 1]; } else { // Each hex digit will take two spaces sArray = new byte[length / 2]; } int digit; int rawdigit; for (int j = 0; i < hexString.Length; i += 2, j++) { rawdigit = ConvertHexDigit(hexString[i]); digit = ConvertHexDigit(hexString[i+1]); sArray[j] = (byte) (digit | (rawdigit << 4)); if (spaceSkippingMode) i++; } return(sArray); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataObjectMethodAttribute.cs
- _SslState.cs
- QueryOutputWriterV1.cs
- WebPartZone.cs
- ToolStripDropDownClosedEventArgs.cs
- ConfigurationProviderException.cs
- CodeGotoStatement.cs
- OracleDateTime.cs
- OutOfMemoryException.cs
- SafeLocalMemHandle.cs
- SchemaTableColumn.cs
- FunctionParameter.cs
- MtomMessageEncodingBindingElement.cs
- path.cs
- AssociationSet.cs
- SchemaNamespaceManager.cs
- GraphicsContext.cs
- HostedTcpTransportManager.cs
- FontDifferentiator.cs
- SingleKeyFrameCollection.cs
- FragmentQueryProcessor.cs
- ActiveXSerializer.cs
- TextElementCollectionHelper.cs
- CustomAttribute.cs
- FontFamilyValueSerializer.cs
- EntityDataSourceMemberPath.cs
- Enlistment.cs
- X509CertificateRecipientClientCredential.cs
- SymbolPair.cs
- MessageBox.cs
- Rotation3DKeyFrameCollection.cs
- EventLogPermission.cs
- AppearanceEditorPart.cs
- ToolStripPanelSelectionBehavior.cs
- WebPartDeleteVerb.cs
- ConfigXmlCDataSection.cs
- TemplateControlParser.cs
- MessageBox.cs
- CultureInfoConverter.cs
- QuaternionAnimation.cs
- DataControlButton.cs
- DigitShape.cs
- XamlTemplateSerializer.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- EntityDataSourceStatementEditor.cs
- CdpEqualityComparer.cs
- Utils.cs
- MediaSystem.cs
- GraphicsPathIterator.cs
- MenuRendererClassic.cs
- WebResponse.cs
- SQlBooleanStorage.cs
- AnnotationResource.cs
- SpanIndex.cs
- ListItemViewControl.cs
- WebControlAdapter.cs
- ToolStripSettings.cs
- ParentQuery.cs
- LZCodec.cs
- ControlBuilder.cs
- XmlAnyElementAttribute.cs
- InternalPolicyElement.cs
- WindowsScrollBar.cs
- ObjectDataSourceMethodEventArgs.cs
- SettingsPropertyWrongTypeException.cs
- xml.cs
- FieldNameLookup.cs
- SafeCertificateStore.cs
- XmlSchemaExternal.cs
- BulletChrome.cs
- MemberDescriptor.cs
- PersonalizationStateQuery.cs
- Perspective.cs
- RowVisual.cs
- CryptoApi.cs
- ObjectDataSource.cs
- SourceFileInfo.cs
- KeyValueConfigurationElement.cs
- SqlInternalConnectionTds.cs
- AnnotationHelper.cs
- X509RawDataKeyIdentifierClause.cs
- SynchronizedDispatch.cs
- IERequestCache.cs
- DrawingCollection.cs
- VerifyHashRequest.cs
- DataColumnPropertyDescriptor.cs
- Property.cs
- ConstraintStruct.cs
- DataColumnChangeEvent.cs
- BitHelper.cs
- PlainXmlSerializer.cs
- SqlDependencyListener.cs
- ByteStreamMessage.cs
- ControlBuilderAttribute.cs
- Parameter.cs
- Size.cs
- ListViewInsertedEventArgs.cs
- DependencyPropertyAttribute.cs
- ReaderContextStackData.cs
- DataAdapter.cs