2016-11-10 9 views
0

Я пытаюсь записать в шестнадцатеричный файл с помощью PB12.5, я могу писать ему без каких-либо проблем, но через тестирование заметили, что мне нужно будет отправить нулевое значение (00) в файл в определенных точках.Пытается записать в Hex-файл (.bin) с помощью PB12.5 с помощью BlobEdit (Blob)

Я знаю, что если я назначаю нуль для строки, она будет обнулять всю строку, поэтому я попытался использовать Blob, где я могу вставить нулевое значение при необходимости (BlobEdit (blb_data, ll_pos, CharA (0)))

Но BlobEdit() автоматически вставляет нулевое значение между каждой позицией, я не хочу этого, поскольку это вызывает проблемы, поскольку я пытаюсь обновить шестнадцатеричный файл. Мне просто нужно добавить свой CharA (lb_byte) в каждую последовательную позицию в Blob.

Есть ли какой-либо путь вокруг этого или есть PB, просто неспособный это сделать? Ниже приведен код: появляется

ll_test = 1 
    ll_pos = 1 
    ll_length = Len(ls_output) 
    Do While ll_pos <= (ll_length) 
     ls_data = Mid(ls_output, ll_pos, 2) 
     lb_byte = Event ue_get_decimal_value_of_hex(ls_data) 
     ll_test = BlobEdit(blb_data, ll_test, CharA(lb_byte), EncodingANSI!) 
     ll_pos = ll_pos + 2 
    Loop 

Hex файл следующим образом:

16 35 2D D8 08 45 29 18 35 27 76 25 30 55 66 85 44 66 57 A4 67 99 

После обновления Blob:

16 00 48 00 5D 00 C3 92 00 08 00 48 00 51 00 E2 

ответ

1

Я надеюсь помочь вам:

////////////////////////////////////////////////////////////////////////// 
// Function: f_longtohex 
// Description: LONG to HEXADECIMAL 
// Ambito: public 
// Argumentos:  as_number //Variable long to convert to hexadecimal 
//    as_digitos //Number of digits to return 
// Return:   String  
// Example: 
//    f_longtohex(198 , 2) --> 'C6' 
//    f_longtohex(198 , 4) --> '00C6' 
////////////////////////////////////////////////////////////////////////// 
long ll_temp0, ll_temp1 
char lc_ret 
if isnull(as_digitos) then as_digitos = 2 
IF as_digitos > 0 THEN 
    ll_temp0 = abs(as_number/(16^(as_digitos - 1))) 
    ll_temp1 = ll_temp0 * (16^(as_digitos - 1)) 
    IF ll_temp0 > 9 THEN 
     lc_ret = char(ll_temp0 + 55) 
    ELSE 
     lc_ret = char(ll_temp0 + 48) 
    END IF 
    RETURN lc_ret + f_longtohex(as_number - ll_temp1 , as_digitos - 1) 
END IF 
RETURN ''