我尝试使用PB12.5写入hex文件,我能够写入它而没有任何问题但是通过测试注意到我需要发送一个空值(00)到在特定点提交。
我知道如果我为字符串赋值null,它将使整个字符串为空,所以我尝试使用Blob,我可以在需要时插入一个空值(BlobEdit(blb_data,ll_pos,CharA(0)))
但是BlobEdit()会自动在每个位置之间插入一个空值,我不想这样,因为我试图更新hex文件会导致问题。我只需要将我的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
答案 0 :(得分: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 ''