using System;
public class OctetString
{
private byte[] m_bDataArray = null;
public OctetString(byte[] data_i)
{
//copy input data
m_bDataArray = new byte[data_i.Length];
data_i.CopyTo(m_bDataArray, 0);
}
//...
//checks if a bit on a specfied position is set
public bool CheckIfBitOnPositionIsSet(int iPosition)
{
if (m_bDataArray.Length * 8 < iPosition)
{
return false;
}
int iByte = iPosition / 8;
int iBit = iPosition % 8;
byte bData = m_bDataArray[iByte];
if((bData & (0x1 << iBit)) != 0)
{
return true;
}
else
{
return false;
}
}
}
public class Test
{
public static void Main()
{
byte[] data = { 0xFF, 0x3F, 0x00 };
OctetString octetString = new OctetString(data);
bool isSet = octetString.CheckIfBitOnPositionIsSet(15);
System.Console.Out.WriteLine("{0:d}", isSet);
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIE9jdGV0U3RyaW5nIAp7CiAgICBwcml2YXRlIGJ5dGVbXSBtX2JEYXRhQXJyYXkgPSBudWxsOwoKICAgIHB1YmxpYyBPY3RldFN0cmluZyhieXRlW10gZGF0YV9pKQogICAgewogICAgICAgIC8vY29weSBpbnB1dCBkYXRhCiAgICAgICAgbV9iRGF0YUFycmF5ID0gbmV3IGJ5dGVbZGF0YV9pLkxlbmd0aF07CiAgICAgICAgZGF0YV9pLkNvcHlUbyhtX2JEYXRhQXJyYXksIDApOwogICAgfQoJCgkvLy4uLgoJLy9jaGVja3MgaWYgYSBiaXQgb24gYSBzcGVjZmllZCBwb3NpdGlvbiBpcyBzZXQKCXB1YmxpYyBib29sIENoZWNrSWZCaXRPblBvc2l0aW9uSXNTZXQoaW50IGlQb3NpdGlvbikKCXsKCQlpZiAobV9iRGF0YUFycmF5Lkxlbmd0aCAqIDggPCBpUG9zaXRpb24pCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlpbnQgaUJ5dGUgPSBpUG9zaXRpb24gLyA4OwoJCQoJCWludCBpQml0ID0gaVBvc2l0aW9uICUgODsKCgkJYnl0ZSBiRGF0YSA9IG1fYkRhdGFBcnJheVtpQnl0ZV07CgoJCWlmKChiRGF0YSAmICgweDEgPDwgaUJpdCkpICE9IDApCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJZWxzZQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCX0KfQoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCWJ5dGVbXSBkYXRhID0geyAweEZGLCAweDNGLCAweDAwIH07CiAgICAgICAgT2N0ZXRTdHJpbmcgb2N0ZXRTdHJpbmcgPSBuZXcgT2N0ZXRTdHJpbmcoZGF0YSk7CiAgICAgICAgYm9vbCBpc1NldCA9IG9jdGV0U3RyaW5nLkNoZWNrSWZCaXRPblBvc2l0aW9uSXNTZXQoMTUpOwogICAgICAgIFN5c3RlbS5Db25zb2xlLk91dC5Xcml0ZUxpbmUoInswOmR9IiwgaXNTZXQpOwoJfQp9