我试图在python中附加一些十六进制值,我似乎总是在数字之间得到0x。从我搜索的内容来看,如果不将其转换为点燃的值,这是不可能的?我不确定。
a = 0x7b
b = 0x80000
hex(a) + hex(b) = 0x7b0x80000
我不希望中间的0x - 我需要,0x7b80000
。还有其他办法吗?如果我转换为整数,我得到两者的总和并将其转换为十六进制是一个不同于0x7b80000
答案 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'