mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-08 12:07:03 -06:00
77 lines
1.7 KiB
C++
Executable File
77 lines
1.7 KiB
C++
Executable File
// 7zMethodID.cpp
|
|
|
|
#include "StdAfx.h"
|
|
|
|
#include "7zMethodID.h"
|
|
|
|
namespace NArchive {
|
|
namespace N7z {
|
|
|
|
static wchar_t GetHex(Byte value)
|
|
{
|
|
return (wchar_t)((value < 10) ? ('0' + value) : ('A' + (value - 10)));
|
|
}
|
|
|
|
static bool HexCharToInt(wchar_t value, Byte &result)
|
|
{
|
|
if (value >= '0' && value <= '9')
|
|
result = (Byte)(value - '0');
|
|
else if (value >= 'a' && value <= 'f')
|
|
result = (Byte)(10 + value - 'a');
|
|
else if (value >= 'A' && value <= 'F')
|
|
result = (Byte)(10 + value - 'A');
|
|
else
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
static bool TwoHexCharsToInt(wchar_t valueHigh, wchar_t valueLow, Byte &result)
|
|
{
|
|
Byte resultHigh, resultLow;
|
|
if (!HexCharToInt(valueHigh, resultHigh))
|
|
return false;
|
|
if (!HexCharToInt(valueLow, resultLow))
|
|
return false;
|
|
result = (Byte)((resultHigh << 4) + resultLow);
|
|
return true;
|
|
}
|
|
|
|
UString CMethodID::ConvertToString() const
|
|
{
|
|
UString result;
|
|
for (int i = 0; i < IDSize; i++)
|
|
{
|
|
Byte b = ID[i];
|
|
result += GetHex((Byte)(b >> 4));
|
|
result += GetHex((Byte)(b & 0xF));
|
|
}
|
|
return result;
|
|
}
|
|
|
|
bool CMethodID::ConvertFromString(const UString &srcString)
|
|
{
|
|
int length = srcString.Length();
|
|
if ((length & 1) != 0 || (length >> 1) > kMethodIDSize)
|
|
return false;
|
|
IDSize = (Byte)(length / 2);
|
|
UInt32 i;
|
|
for(i = 0; i < IDSize; i++)
|
|
if (!TwoHexCharsToInt(srcString[i * 2], srcString[i * 2 + 1], ID[i]))
|
|
return false;
|
|
for(; i < kMethodIDSize; i++)
|
|
ID[i] = 0;
|
|
return true;
|
|
}
|
|
|
|
bool operator==(const CMethodID &a1, const CMethodID &a2)
|
|
{
|
|
if (a1.IDSize != a2.IDSize)
|
|
return false;
|
|
for (UInt32 i = 0; i < a1.IDSize; i++)
|
|
if (a1.ID[i] != a2.ID[i])
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
}}
|