Muszę przekonwertować int na wartość szesnastkową. Jest to na przykład wartość int:Android int na konwersję szesnastkową
int_value = -13516;
Aby przeliczyć na wartość hex zrobić:
hex_value = Integer.toHexString(int_value);
Wartość, która powinna uzyskać to: -34CC
(nie wiem, czy powinienem zrobić to pozytywne).
Chodzi o to, że robi konwersję w ten sposób, że wartość pojawia się: ffff cb34
nie mogę korzystać z tej funkcji, aby uczynić tę przemianę?
To nie dokonać konwersji! Dało ci szesnastkową reprezentację wartości, która ma ustawiony bit znaku, ponieważ jest ujemny. Android używa uzupełnienia dwójkowego do reprezentowania ujemnych liczb całkowitych: wartość ujemna jest reprezentowana przez ustawiony lewy skrajny bit, a wartość dodatnia jest reprezentowana przez lewy skrajny bit, który jest rozbrajany. Zobacz [Podpisane reprezentacje liczbowe] (https://en.wikipedia.org/wiki/Signed_number_representations). Zdaję sobie sprawę, że ma to dwa lata, ale solidne zrozumienie podstawowych mechanizmów jest cenną rzeczą dla programistów. :) –
@LorneLaliberte Nadal nieoczekiwane, jeśli (na przykład) masz tło C, gdzie specyfikator formatu% X printf da ci niepodpisaną szesnastkową reprezentację niezależnie od tego, ile go podasz, podpisałeś czy nie. Co gorsza, Java nie ma * * niepodpisanych typów całkowitych, więc nie możesz nawet tego naprawić! – Michael
@Micheal nie ma różnicy między C i Java w tym przypadku, w rzeczywistości java zwraca również wartość unsigned.Bity (a zatem szesnastkowa reprezentacja tych bitów) są takie same w obu kierunkach. "Podpisany" i "niepodpisany" to tylko różne interpretacje bitów. Myślę, że możesz odświeżyć swoją pamięć funkcji 'sprintf' w C, ponieważ specyfikator'% X' działa w taki sam sposób w obu językach. –