我正在尝试通过udp发送一串十六进制值,
11 22 33 44 37 4D 58 33 38 4C 30 39 47 35 35 34 31 35 31 04 D7 52 FF 0F 03 43 2D AA
在C ++中使用UdpClient。
将string^
转换为 array< Byte >^
的最佳方法是什么?
答案 0 :(得分:1)
这对我有用,虽然我还没有很好地测试错误检测。
ref class Blob
{
static short* lut;
static Blob()
{
lut = new short['f']();
for( char c = 0; c < 10; c++ ) lut['0'+c] = 1+c;
for( char c = 0; c < 6; c++ ) lut['a'+c] = lut['A'+c] = 11+c;
}
public:
static bool TryParse(System::String^ s, array<System::Byte>^% arr)
{
array<System::Byte>^ results = gcnew array<System::Byte>(s->Length/2);
int index = 0;
int accum = 0;
bool accumReady = false;
for each (System::Char c in s) {
if (c == ' ') {
if (accumReady) {
if (accum & ~0xFF) return false;
results[index++] = accum;
accum = 0;
}
accumReady = false;
continue;
}
accum <<= 4;
accum |= (c <= 'f')? lut[c]-1: -1;
accumReady = true;
}
if (accumReady) {
if (accum & ~0x00FF) return false;
results[index++] = accum;
}
arr = gcnew array<System::Byte>(index);
System::Array::Copy(results, arr, index);
return true;
}
};
答案 1 :(得分:0)
如果您尝试将其作为ascii字节发送,那么您可能需要System::Text::Encoding::ASCII::GetBytes(String^)
。
如果你想首先将字符串转换为一堆字节(所以发送的第一个字节是0x11),你需要根据空格分割字符串,在每个字符串上调用Convert::ToByte(String^, 16)
,然后将它们放入要发送的数组。