我正在尝试使用PB12.5写入十六进制文件,我能够在没有任何问题的情况下写入它,但通过测试注意到我需要在某些点向文件发送空值(00)。
我知道如果我将null分配给字符串,它将清空整个字符串,所以我尝试使用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
十六进制文件如下所示:
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
希望对你有所帮助:
//////////////////////////////////////////////////////////////////////////
// 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 ''