Я собираю двоичную информацию из многоадресного потока на ОЧЕНЬ старой системе. Я конвертировал большую часть, но у меня проблемы с комбо High / Low DWORD. Я написал небольшое тестовое приложение, чтобы попытаться сгладить это. Мне говорят, что значение должно быть в диапазоне 30XXX.
В документации, которую мне дали, сказано, что она определена как ...
DWORD ID_HIGH;
DWORD ID_LOW;
Пока что я просто получаю мусор. Я пробовал сдвиги в битах и кучу других маршрутов. Пока что не повезло. Любая помощь приветствуется.
static void Main(string[] args)
{
byte[] data = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x04, 0x51};
Int32 ID_High = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(data, 0));
Int32 ID_Low = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(data, 4));
Int64ToInt32 i6;
i6.Int64Value = 0;
i6.LeftInt32 = ID_High;
i6.RightInt32 = ID_Low;
}
[StructLayout(LayoutKind.Explicit)]
struct Int64ToInt32
{
[FieldOffset(0)]
public Int64 Int64Value;
[FieldOffset(0)]
public Int32 LeftInt32;
[FieldOffset(4)]
public Int32 RightInt32;
}
Для получения дополнительной информации. Вот весь байт [], полученный от многоадресной рассылки.
byte[] data = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x04, 0x51, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x04, 0x50, 0x00, 0x00, 0x04, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x90, 0x3E, 0xE4, 0x62, 0xB8, 0xB1, 0x4D, 0xB0, 0xF1, 0x15, 0x94,
0xF1, 0x13, 0x0F, 0x84, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00 };
А вот определение того, на что он должен переводиться.
typedef struct
{
DWORD AgentID_High; // Agent phoneset login ID high-order 32 bits
DWORD AgentID_Low; // Agent phoneset login ID low-order 32 bits
DWORD State;
DWORD SupervisorID_High; // Supervisor phoneset login ID high-order 32 bits
DWORD SupervisorID_Low; // Supervisor phoneset login ID low-order 32 bits
DWORD TimeInState;
DWORD AnsweringSkillset;
DWORD DNInTimeInState;
DWORD DNOutTimeInState;
BYTE SupervisorUserID[16];
DWORD PositionID;
// TM26314
DWORD NotReadyReasonCode_High;
DWORD NotReadyReasonCode_Low;
DWORD DNOutCallNumber_High;
DWORD DNOutCallNumber_Low;
DWORD SkillsetCallAnswered;
DWORD DNInCallAnswered;
DWORD DNOutCallMade;
//Q00635846 griffinn MIROS Changes
DWORD AnsweringApplication;
DWORD AnsweringCDN_High;
DWORD AnsweringCDN_Low;
DWORD AnsweringDNIS_High;
DWORD AnsweringDNIS_Low;
} NIMultiCastAgentRecord_Rls5; // size = 104 bytes
Все остальные DWORDS разбираются нормальнотолько с IPAddress.NetworkToHostOrder (BitConverter.ToInt32 (data, 0));Кроме этих раздельных слов. Лично я думал, что данные не кажутся правильными, но я хотел получить второе мнение.
** Последние разработки. Идентификатор агента - 30451 из того, что мне говорят. если вы посмотрите на шестнадцатеричные биты, то это прямо в HEX.
byte[] data = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x04, 0x51};
Итак, вот что я придумала. Я чувствую, что нарушаю всевозможные правила здесь ...
string AgentID = BitConverter.ToString(data);
AgentID = AgentID.Replace("-", "").Replace("F", "");