尝试使用PB12.5使用BlobEdit (Blob)写入十六进制文件(.bin)



我正在尝试使用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 ''

相关内容

  • 没有找到相关文章

最新更新