Community
    • Login

    Script To Fix ASCII->Hex Byte Limit

    Scheduled Pinned Locked Moved Notepad++ & Plugin Development
    3 Posts 3 Posters 62 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      LanceMarchetti
      last edited by LanceMarchetti

      Hi All, I was always battling to convert more than 100KB with the ASCII to HEX Converter plugin, due to a memory restriction issue, “Bad Allocation”. So here’s a helpful Python script I asked AI to assist me with.

      1.) Highlight all the bytes you want converted
      2.) Execute the script.
      3.) It will first check that Encoding is set to Windows-1252
      4.) Then proceeds to convert every 100KB in chunks to completion.

      from Npp import notepad, editor, console
      import time
      
      WIN1252_ID = 45022
      ASCII_TO_HEX_ID = 22070
      
      MAX_CHUNK_SIZE = 100228  # max bytes per chunk allowed by plugin
      
      def switch_encoding():
          notepad.menuCommand(WIN1252_ID)
          console.write("Switched encoding to Windows-1252\n")
          time.sleep(0.5)  # wait for encoding switch
      
      def convert_chunk(start_pos, length):
          end_pos = start_pos + length
          editor.setSelection(start_pos, end_pos)
          console.write("Selected chunk from {} to {} (length {})\n".format(start_pos, end_pos, length))
          notepad.menuCommand(ASCII_TO_HEX_ID)
          console.write("Converted chunk ASCII -> HEX\n")
          time.sleep(0.7)  # wait for conversion to complete
      
      def main():
          switch_encoding()
      
          total_length = editor.getLength()
          console.write("Total document length: {}\n".format(total_length))
      
          current_pos = 0
          while current_pos < total_length:
              # Calculate chunk size (do not exceed MAX_CHUNK_SIZE or remaining length)
              chunk_size = min(MAX_CHUNK_SIZE, total_length - current_pos)
      
              # Convert chunk
              convert_chunk(current_pos, chunk_size)
      
              # After conversion, the selected chunk is replaced by hex text,
              # which is roughly 3x the original length (2 hex chars + space per byte),
              # so the document length increases.
              # To find new current_pos, we get selection end after conversion.
              sel_start = editor.getSelectionStart()
              sel_end = editor.getSelectionEnd()
              converted_length = sel_end - sel_start
      
              # Move current_pos forward by the length of converted hex text
              current_pos = sel_end
      
              # Update total_length for next iteration
              total_length = editor.getLength()
      
              console.write("Updated current_pos: {}, total_length: {}\n".format(current_pos, total_length))
      
          console.write("Completed chunked ASCII to HEX conversion.\n")
      
      if __name__ == "__main__":
          main()
      

      Save as ascii2hex.py in: \plugins\PythonScript\scripts\Samples

      Alan KilbornA EkopalypseE 2 Replies Last reply Reply Quote 0
      • Alan KilbornA
        Alan Kilborn @LanceMarchetti
        last edited by

        @LanceMarchetti said:

        here’s a helpful Python script I asked AI to assist me with.

        Posting AI generated code is a violation of forum policy, FYI.

        @LanceMarchetti said:

        Save as ascii2hex.py in: \plugins\PythonScript\scripts\Samples

        This is not the best advice; it’s not a “sample”.
        Just save it in the normal location for scripts, i.e., ...\plugins\Config\PythonScript\scripts

        1 Reply Last reply Reply Quote 3
        • EkopalypseE
          Ekopalypse @LanceMarchetti
          last edited by

          @LanceMarchetti said in Script To Fix ASCII->Hex Byte Limit:

          So here’s a helpful Python script I asked AI to assist me with

          If the prompt was similar to your explanation of what the script does, then once again the AI has done a poor job.
          Firstly, it acts on the whole file, not just the selected part and secondly and far more critically, your ASCII_TO_HEX_ID definition is incorrect and Npp will therefore execute an arbitrary command.

          1 Reply Last reply Reply Quote 0
          • First post
            Last post
          The Community of users of the Notepad++ text editor.
          Powered by NodeBB | Contributors