在python中追加2个十六进制值

时间:2013-03-26 04:26:53

标签: python string hex

我试图在python中附加一些十六进制值,我似乎总是在数字之间得到0x。从我搜索的内容来看,如果不将其转换为点燃的值,这是不可能的?我不确定。

a = 0x7b
b = 0x80000
hex(a) + hex(b) = 0x7b0x80000

我不希望中间的0x - 我需要,0x7b80000。还有其他办法吗?如果我转换为整数,我得到两者的总和并将其转换为十六进制是一个不同于0x7b80000

的值

4 个答案:

答案 0 :(得分:2)

我认为你不想“追加”它们。使用字符串进行整数运算是个坏主意。我想你想把a移位到正确的位置并将它们组合在一起:

>>> a = 0x7B
>>> b = 0x80000
>>>
>>> hex( (a<<20) | b )
'0x7b80000'

也许如果你更具体地说明这些数字是什么以及你想要完成什么,我可以提供更一般的答案。

答案 1 :(得分:2)

这是一种更通用的方式来追加hex / int / bin值。
仅适用于b的正值。

a = 0x7b
b = 0x80000

def append_hex(a, b):
    sizeof_b = 0

    # get size of b in bits
    while((b >> sizeof_b) > 0):
        sizeof_b += 1

    # align answer to nearest 4 bits (hex digit)
    sizeof_b += sizeof_b % 4

    return (a << sizeof_b) | b

print(hex(append_hex(a, b)))

基本上你必须找到b具有的最高设置位 将该数字与4的最高倍数对齐,因为这是hex个字符 将a附加到之前找到的最高4的前面。

答案 2 :(得分:0)

已经7年了,但是被接受的答案是错误的,该帖子仍然出现在Google搜索的第一位;所以这是一个正确的答案:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        viewModel.isProgress.set(true)
        loadUrl()
    }

    private fun loadUrl() {
        val webview = binding.webview
        webview.webViewClient = RJBrowser()
        webview.webChromeClient = RJChromeBrowser()
        webview.settings.loadsImagesAutomatically = true
        webview.settings.javaScriptEnabled = true
        webview.scrollBarStyle = View.SCROLLBARS_INSIDE_OVERLAY

        val settings = webview.settings
        settings.setAppCacheEnabled(true)
        settings.cacheMode = WebSettings.LOAD_DEFAULT
        settings.useWideViewPort = true
        settings.loadWithOverviewMode = true
        settings.javaScriptCanOpenWindowsAutomatically = true
        settings.mediaPlaybackRequiresUserGesture = false


        // More optional settings, you can enable it by yourself
        settings.domStorageEnabled = true
        settings.setSupportMultipleWindows(true)
        settings.loadWithOverviewMode = true
        settings.allowContentAccess = true
        settings.setGeolocationEnabled(true)
        settings.allowUniversalAccessFromFileURLs = true

        settings.allowFileAccess = true

        // WebView settings
        webview.fitsSystemWindows = true
        webview.loadUrl(url)
    }



inner class RJBrowser : WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
        view.loadUrl(url)
        return true
    }

    override fun onPageFinished(view: WebView?, url: String?) {
        super.onPageFinished(view, url)
        viewModel.isProgress.set(false)

    }
}
inner class RJChromeBrowser  :WebChromeClient(){
        override fun onProgressChanged(view: WebView?, newProgress: Int) {
            super.onProgressChanged(view, newProgress)
        }

        override fun onShowFileChooser(
            webView: WebView?,
            filePathCallback: ValueCallback<Array<Uri>>?,
            fileChooserParams: FileChooserParams?
        ): Boolean {
            return super.onShowFileChooser(webView, filePathCallback, fileChooserParams)
        }
    }

接受的答案没有意义(您可以使用值a = 10,b = 1a进行检查)。在此解决方案中,我们搜索最接近的4分频器-因为每个十六进制值都由4位表示-然后将第一个值移动到此位。

答案 3 :(得分:0)

您可以在 Python 3 中使用 f 字符串格式:

>>> a = 0x7b
>>> b = 0x80000
>>> f'0x{a:x}{b:x}'
'0x7b80000'